Linux创建线程


  1. #include"stdio.h"
  2. #include"unistd.h"
  3. #include"stdlib.h"
  4. #include"pthread.h"
  5. #include"semaphore.h"
  6. #include"string.h"
  7. void*thread_function(void*arg);
  8. pthread_mutex_twork_mutex;
  9. #defineWORK_SIZE1024
  10. charwork_area[WORK_SIZE];
  11. inttime_to_exit=0;
  12. intmain()
  13. {
  14. intres;
  15. pthread_ta_thread;
  16. void*thread_result;
  17. res=pthread_mutex_init(&work_mutex,NULL);
  18. if(res!=0){
  19. perror("Mutexinitializationfailed");
  20. exit(EXIT_FAILURE);
  21. }
  22. res=pthread_create(&a_thread,NULL,thread_function,NULL);
  23. if(res!=0){
  24. perror("Threadcreationfailed!\n");
  25. exit(EXIT_FAILURE);
  26. }
  27. pthread_mutex_lock(&work_mutex);
  28. printf("Inputsometext.Enter'end'tofinish\n");
  29. while(!time_to_exit){
  30. fgets(work_area,WORK_SIZE,stdin);
  31. pthread_mutex_unlock(&work_mutex);
  32. while(1){
  33. pthread_mutex_unlock(&work_mutex);
  34. if(work_area[0]!='\0'){
  35. pthread_mutex_unlock(&work_mutex);
  36. sleep(1);
  37. }
  38. else{
  39. break;
  40. }
  41. }
  42. pthread_mutex_unlock(&work_mutex);
  43. printf("\nWaitingforthresdtofinish...\n");
  44. res=pthread_join(a_thread,&thread_result);
  45. if(res!=0){
  46. perror("Threadjoinfailed!\n");
  47. exit(EXIT_FAILURE);
  48. }
  49. printf("Threadjoined!\n");
  50. pthread_mutex_destroy(&work_mutex);
  51. exit(EXIT_SUCCESS);
  52. }
  53. }
  54. void*thread_function(void*arg)
  55. {
  56. sleep(1);
  57. pthread_mutex_lock(&work_mutex);
  58. while(strncmp("end",work_area,3)!=0){
  59. printf("Youinput%dchatacters\n",strlen(work_area)-1);
  60. work_area[0]='\0';
  61. pthread_mutex_lock(&work_mutex);
  62. sleep(1);
  63. pthread_mutex_lock(&work_mutex);
  64. while(work_area[0]=='\0'){
  65. pthread_mutex_unlock(&work_mutex);
  66. sleep(1);
  67. pthread_mutex_lock(&work_mutex);
  68. }
  69. }
  70. time_to_exit=1;
  71. work_area[0]='\0';
  72. pthread_mutex_unlock(&work_mutex);
  73. pthread_exit(0);
  74. }

本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值