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()设置优先级
原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5779012.html