posix多线程程序设计 pdf,

  posix多线程程序设计 pdf,

  使用Posix标准线程库编程

  c复习-使用Posix标准线程库编程用pthread编程用pthread?Pthread是什么?

  Pthread作为C/C编程的标准线程库,其实就是POSIX标准线程库。

  那么,如何理解POSIX标准呢?

  下面是一些资料的链接,有兴趣的可以自行查阅。

  1.http://zh.wikipedia.org/wiki/POSIX

  2.standards.ieee.org/findstds/standard/1003.1-2008.html

  3.www.opengroup.org/austin/papers/posix_faq.html

  4.www.unix.org/version3/ieee_std.html

  在哪里可以找到Pthread的源代码实现?

  如果有必要,你想阅读或者学习Pthread,那么你可以下载glibc的源代码,里面包含了Pthread的实现。

  GNU ftp站点链接:http://ftp.gnu.org/gnu/glibc

  Pthread APIs:

  Pthread API可以分为以下四个部分:

  1.线程管理:对线程的操作,如创建、挂起、连接等。包括对线程属性的一些操作。

  2.互斥体:互斥体,为同步提供支持。

  3.Conditionalvars:条件锁,它在共享互斥体的线程之间进行通信。

  5.同步:管理同步

  关于Pthread接下来的中文学习还有很多资料,这里就不介绍更多的相关知识了。如果你是新手,

  那么自学前请参考相关资料和书籍。请见谅~

  在pthread_exit和pthread_join上。

  记得考试前一天,我的大四研究生问了我一个问题:他说他在用Pthread库的时候,他创建的worker线程不行了,让我帮他。

  他解决了这个问题。现在我已经忘记了他当时写的代码,但是我还记得问题,所以我可以用另一个小例子来代替:

  查看代码?123456789101112131415161718192021222232282930313233343637383940414243444454647 # include stdio . h # include stdlib . h # include unistd . h # include pthread . h # define THREAD _ NUMS 20//worker void * Greeting(voidint main(int args,char * * argv){ pthread _ t workers[THREAD _ NUMS];int retvalint索引;char *msg=Hello Pthread!;for(索引=0;索引线程_ NUMS;index){ retval=pthread _ create(workers[index],NULL,Greeting,(void *)msg);if(retval==-1){printf(%sn , error!);退出(-1);} }//pthread _ exit(NULL);返回EXIT _ SUCCESS} void * Greeting(void * msg){ printf( Thread # % LD,Greeting %sn ,(long)pthread_self(),(char *)msg);us LEEP(1000000);}看到我在上面的代码中把pthread_exit(NULL)去掉了,预测这个小程序会怎么样其实很简单。也就是说,只有一部分创建的线程被完成

  对于指定的作业,由于主线程已退出,另一个线程在完成该作业之前已失去其运行环境。

  好了,下面是pthread_exit(NULL)的作用,就是等待所有子线程退出。

  虽然pthread_join和pthread_exit具有类似的功能,但是退出状态代码可以从正在退出的子线程中获得。

  注意互斥的使用:

  当使用共享内存在线程间通信时,共享区域中的所有数据写操作都需要被锁定。当然,阅读操作不需要~

  的常见用法如下:

  ?1234567pthread_mutex_lock(互斥);////.//pthread_mutex_unlock(互斥);在争锁的时候,至于使用互斥,哪个线程在争锁的时候会赢?这个问题涉及到线程的优先级调度。如果未设置,将使用优先级调度。

  策略,那么锁的获取是随机的,即不可预测的。

  互斥锁和条件锁一起使用:

  在条件锁的操作函数中,很多都与互斥体有关,需要伙伴使用。如上所述,如果只使用互斥,则不使用优先级调度。

  换句话说,我们不能指定线程之间的通信。比如线程A完成后,需要分配线程B去完成某件事。

  工作,如果只使用互斥,这是做不到的,因为不能保证线程A释放锁后B能立即得到锁。所以这个时候需要使用条件锁。

  条件锁通常以下列形式使用:

  ?123456789101112131415161718192021222232282930313233343536373839404142 void * thread _ work _ func 1(void * parm){ for(;){pthread_mutex_lock(互斥);if(xxxx){ pthread _ cond _ signal(condition);}else{//.} pthread_mutex_unlock(互斥);} } void * thread _ work _ fun 2(void * parm){ for(;){pthread_mutex_lock(互斥);pthread_cond_wait(条件,互斥);//做点什么.pthread_mutex_unlock(互斥);}}由于后面需要看glib的源代码,它的一些线程是关于pthread的,所以请大家复习一下。在下面的文章中,我将再次介绍pthread。

  到时候我再考虑详细写。

posix多线程程序设计 pdf,