预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共40页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四讲Linux多线程编程进程与线程(一)进程与线程(二)多线程程序的优点多线程编程起步intmain(void){pthread_tid;inti,ret;ret=pthread_create(&id,NULL,(void*)thread,NULL);if(ret!=0){printf("Createpthreaderror!\n");exit(1);}for(i=0;i<3;i++)printf("Thisisthemainprocess.\n");pthread_join(id,NULL);return(0);}执行:gccexample.c-lpthread-oexample-l参数用于指定编译时要用到的库运行生成的example每次运行的结果可能不同,这是因为两个线程在争夺CPU资源线程标识符pthread_t主要API函数介绍线程创建函数pthread_create当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。pthread_join函数pthread_exit函数线程的属性线程的优先级#include<pthread.h>#include<sched.h>pthread_attr_tattr;pthread_ttid;sched_paramparam;intnewprio=20;pthread_attr_init(&attr);pthread_attr_getschedparam(&attr,&param);param.sched_priority=newprio;pthread_attr_setschedparam(&attr,&param);pthread_create(&tid,&attr,(void*)myfunction,myarg);互斥锁voidreader_function(void);voidwriter_function(void);charbuffer;intbuffer_has_item=0;pthread_mutex_tmutex;structtimespecdelay;voidmain(void){pthread_treader;/*定义延迟时间*/delay.tv_sec=2;delay.tv_nec=0;/*用默认属性初始化一个互斥锁对象*/pthread_mutex_init(&mutex,NULL);pthread_create(&reader,pthread_attr_default,(void*)&reader_function),NULL);writer_function();}voidwriter_function(void){while(1){/*锁定互斥锁*/pthread_mutex_lock(&mutex);if(buffer_has_item==0){buffer=make_new_item();buffer_has_item=1;}/*打开互斥锁*/pthread_mutex_unlock(&mutex);pthread_delay_np(&delay);}}voidreader_function(void){while(1){pthread_mutex_lock(&mutex);if(buffer_has_item==1){consume_item(buffer);buffer_has_item=0;}pthread_mutex_unlock(&mutex);pthread_delay_np(&delay);}}声明互斥锁变量pthread_mutex_tmutex函数pthread_mutex_init用来生成一个互斥锁。NULL参数表明使用默认属性。pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。在上面的例子中,我们使用了pthread_delay_np函数,让线程睡眠一段时间,就是为了防止一个线程始终占据此函数。。条件变量pthread_cond_init函数pthread_cond_wait函数pthread_cond_timedwait函数pthread_cond_signal函数使用函数pthread_cond_wait()和函数pthread_con