zoukankan      html  css  js  c++  java
  • linux多线程编程基本操作(2)

    linux c多线程总结:
    1:关于线程和进程
        a:使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给
    它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个
    线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间
    彼此切换所需的时间也远远小于进程间切换所需要的时间。
        b:使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,
        这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,
        这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据
        更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。
    2:线程的基本操作步骤:
        a:声明线程标识符变量
            pthread_t xx;
        b:写线程操作函数
            void threadfunction(){...}
        c:如果需要对某些变量和操作加锁,那么先声明一个线程锁标识符变量,并且初始化
            pthread_mutex_t mut;
            pthread_mutex_init(&mut,NULL);
            //子线程中
            pthread_mutex_lock(&mut);
            ...//在需要加锁的地方前后加上
            pthread_mutex_unlock(&mut);
        d:创建运行线程
            pthread_create(1,2,3,4);//1:线程标识符方便以后对该线程的操作,因为一个线程函数可以被创建为多个线程,2:线程属性,3:线程函数,4:函数参数
        e:结束线程
            主线程中:(阻塞函数)pthread_join(1,2)//1:xc标识符,2:存储函数返回值的指针
            子线程中:pthread_exit(1)//1:存储返回值
    3:关于线程属性:
        属性结构为pthread_attr_t,它同样在头文件/usr/include/pthread.h中定义。属性值不能直接设置,
        须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数
        之前调用。属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非
        绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。
        除了可以在pthread_create中第二个参数那里设置属性以外,还可以通过函数pthread_attr_setscope()设置绑定状态,
        使用pthread_detach()设置分离状态,使用pthread_attr_setschedparam()设置优先级
  • 相关阅读:
    http://www.rehack.cn/techshare/webbe/php/3391.html
    SQL 百万级数据提高查询速度的方法
    开学收好这 17 种工具 App,让你新学期学习更有效率
    Git文件常见下标符号说明
    JS模块化开发
    前端路由的实现方式
    单页应用和多页应用
    使用chrome远程调试设备及调试模拟器设备
    移动端实现弹出框渐显和渐隐效果
    前端实现手机相册或照相预览图片及压缩图片的方法
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5779012.html
Copyright © 2011-2022 走看看