Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7513373
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: LINUX

2011-06-19 10:33:47

  1. /*
  2.  * 线程同步——信号量
  3.  * 主线程从键盘读入字符,新线程输出读入的字符
  4.  * Lzy 2011-6-19
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <pthread.h>
  9. #include <semaphore.h>                //信号量头文件
  10. #include <string.h>

  11. sem_t sem;                            //定义信号量
  12. char buf[256];

  13. void *mypthread(void *arg)            //新线程运行函数
  14. {
  15.     sem_wait(&sem);                    //阻塞当前线程
  16.     while(strncmp(buf, "exit", 4) != 0)
  17.     {
  18.         printf("接收字符:");
  19.         puts(buf);
  20.         sem_wait(&sem);                //阻塞当前线程
  21.     }
  22.     pthread_exit(NULL);                //线程退出
  23. }

  24. int main(void)
  25. {
  26.     pthread_t tid;                        //定义线程标识符
  27.     sem_init(&sem, 0,0);                //信号量初始化    
  28.     pthread_create(&tid, NULL, mypthread, NULL);    //创建新线程    
  29.     
  30.     while(strncmp(buf, "exit", 4) != 0)
  31.     {
  32.         printf("输入字符:");
  33.         gets(buf);
  34.         sem_post(&sem);            //激活阻塞在信号量上的线程
  35.     }

  36.     pthread_exit(NULL);            //等待线程结束
  37.     sem_destroy($sem);            //注销信号量
  38.     
  39.     return 0;
  40. }
阅读(1948) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~