写了一小段程序,测试一下线程同步的问题,如下:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <semaphore.h>
  4. #include <pthread.h>
  5. #include <sys/types.h>
  6. #include <unistd.h>
  7.  
  8. sem_t sp;
  9.  
  10. int val = -;
  11. int semPost(sem_t * pSem, int nMaxCount)
  12. {
  13. int nRet, nSemCount;
  14.  
  15. sem_getvalue(pSem, &nSemCount);
  16. if (nSemCount>=nMaxCount)
  17. {
  18. return ;
  19. }
  20. else
  21. {
  22. nRet=sem_post(pSem);
  23. return nRet;
  24. }
  25. }
  26.  
  27. int semWait(sem_t * pSem)
  28. {
  29. int nRet;
  30. nRet=sem_wait(pSem);
  31.  
  32. while (sem_trywait(pSem)==) {}
  33. return nRet;
  34. }
  35.  
  36. void xxx()
  37. {
  38. while()
  39. {
  40. semWait(&sp);
  41. printf("xxx val %d\n",val);
  42. }
  43.  
  44. }
  45.  
  46. void yyy()
  47. {
  48. int i = ;
  49. while()
  50. {
  51. // semPost(&sp,3);
  52. printf("yyy : %d\n",i);
  53. sleep();
  54. if(i++ >= )
  55. {
  56. i = ;
  57. semPost(&sp,);
  58. val = ;
  59. printf("now xxx can run !!!\n");
  60. }
  61. }
  62.  
  63. }
  64.  
  65. int main(int argc,char **argv)
  66. {
  67. pthread_t x;
  68. pthread_t y;
  69.  
  70. sem_init(&sp,,);
  71.  
  72. pthread_create(&x,NULL,(void *)xxx,NULL);
  73. pthread_create(&y,NULL,(void *)yyy,NULL);
  74.  
  75. while()
  76. {
  77. sleep();
  78. }
  79.  
  80. return ;
  81. }

使用sem_post信号量进行线程同步的更多相关文章

  1. mfc通过信号量保证线程同步

    1.声明一个全局handle,记住在cpp里也声明 extern HANDLE uiHandle; 2.创建信号量 uiHandle = CreateSemaphore(NULL,1,1,NULL); ...

  2. Python并行编程(五):线程同步之信号量

    1.基本概念 信号量是由操作系统管理的一种抽象数据类型,用于在多线程中同步对共享资源的使用.本质上说,信号量是一个内部数据,用于标明当前的共享资源可以有多少并发读取. 同样在threading中,信号 ...

  3. 编写高质量代码改善C#程序的157个建议——建议72:在线程同步中使用信号量

    建议72:在线程同步中使用信号量 所谓线程同步,就是多个线程在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定.C#中对象的类型分为引用类型和值类型.CLR在这两种类型上的等待是不一样 ...

  4. 改善C#程序的建议6:在线程同步中使用信号量

    原文:改善C#程序的建议6:在线程同步中使用信号量 所谓线程同步,就是多个线程之间在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定.C#中对象的类型分为引用类型和值类型.CLR在这两 ...

  5. C#并行编程(6):线程同步面面观

    理解线程同步 线程的数据访问 在并行(多线程)环境中,不可避免地会存在多个线程同时访问某个数据的情况.多个线程对共享数据的访问有下面3种情形: 多个线程同时读取数据: 单个线程更新数据,此时其他线程读 ...

  6. 线程同步 –Mutex和Semaphore

    上一篇介绍了同步事件EventWaitHandle,以及它的两个子类型AutoResetEvent和ManualResetEvent.下面接着介绍WaitHandle的另外两个子类型Mutex和Sem ...

  7. 线程同步之信号量(sem_init,sem_post,sem_wait)

    信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区. 不多做解释,要使用信号量同步,需要包含头文件semaphore.h. 主要用到的函数: int ...

  8. 四十三、Linux 线程——线程同步之线程信号量

    43.1 信号量 43.1.1 信号量介绍 信号量从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问 信号量可以实现线程的同步和互斥 通过 sem_post() 和 sem ...

  9. Linux 线程同步的三种方法(互斥锁、条件变量、信号量)

    互斥锁 #include <cstdio> #include <cstdlib> #include <unistd.h> #include <pthread. ...

随机推荐

  1. HeadFirst jsp 02 (体系结构)

    当请求到来时, 必须有人实例化 servlet, 或者至少建立一个新的线程来处理这个请求. 必须有人调用 servlet 的 doPost()或 doGet()方法. 另外还的有人管理 servlet ...

  2. Android 用户界面---拖放(Drag and Drop)(二)

      拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事 ...

  3. 使用Jenkins构建持续集成环境

    简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...

  4. Web Forms vs Web MVC

    MVC相对于WebForm来说更难学习,但性能优于WebForm,比较适合大型项目,开发成本较高,但耦合度低,易于维护,没有太多的现成控件,开发效率较低.对WebForm有基础的人反而不太容易学MVC ...

  5. 如何使用USB安装XenServer 6.x

    在XenServer 5.6以前我们能够很容易的通过一些工具,直接制作USB安装介质,然后快速安装XenServer,但是我们发现,到XenServer6.0以后,通过工具直接制作的XenServer ...

  6. java多线程模拟停车系统

    import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...

  7. HDU1495 非常可乐

    解题思路:简单的宽搜,见代码: #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  8. 《C和指针》读书笔记 第2章-基本概念

    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936485.html

  9. Python time mktime()方法

    描述 Python time mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数. 如果输入的值不 ...

  10. css实现鼠标经过导航文字偏位效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...