线程基础

来源:互联网 发布:淘宝运营需要会什么 编辑:程序博客网 时间:2024/05/18 15:06
线程栈:在线程内部定义的局部变量,为线程私有,当线程结束时,该空间被释放。
如果在线程内部申请堆空间,当线程结束时,该空间不会被释放,为进程共有


线程分离属性:在创建一个线程时,可以它设为分离线程,进程不需要调用pthread_join为其收尸,当线程结束时,由系统自动回收资源。
一个线程默认属性是可联合的(PTHREAD_CREATE_JOINABLE),即线程结束时,需要调用pthread_join来收尸。


pthread_attr_t  attr; //线程属性类型。
pthread_attr_init(&attr); //对线程属性进行初始化
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//设置线程属性为分离属性
pthread_create(&tid, &attr, func, NULL);//创建一个分离线程




互斥锁:
功能:1、使多个进程可以互斥访问共享资源
 2、保护一段重要的代码,使这段代码在执行过程中,不会被打断。( 银行的存款和查询系统)



条件变量:
类型:
pthread_cond_t cond;
pthread_mutex_t mutex;


 //对互斥锁和条件变量进行初始化
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
 


 pthread_mutex_lock(&m);
 while(global != 100)
 {
     pthread_cond_wait(&cond, &mutex);
 }
 
   //xxxxxxxx临界区xxxxxxxxx
pthread_mutex_unlock(&m);




//向等待条件的线程发送信号
pthread_cond_signal(&cond);// 
pthread_cond_broadcat(&cond);//广播式发送




sem_t sem1;
sem_t sem2;


sem_init(&sem1);
sem_init(&sem2);


原创粉丝点击