使用sem_post信号量进行线程同步
2013-06-28 15:01
260 查看
写了一小段程序,测试一下线程同步的问题,如下:
#include <stdio.h> #include <string.h> #include <semaphore.h> #include <pthread.h> #include <sys/types.h> #include <unistd.h> sem_t sp; int val = -1; int semPost(sem_t * pSem, int nMaxCount) { int nRet, nSemCount; sem_getvalue(pSem, &nSemCount); if (nSemCount>=nMaxCount) { return 0; } else { nRet=sem_post(pSem); return nRet; } } int semWait(sem_t * pSem) { int nRet; nRet=sem_wait(pSem); while (sem_trywait(pSem)==0) {} return nRet; } void xxx() { while(1) { semWait(&sp); printf("xxx val %d\n",val); } } void yyy() { int i = 0; while(1) { // semPost(&sp,3); printf("yyy : %d\n",i); sleep(1); if(i++ >= 3) { i = 0; semPost(&sp,3); val = 9; printf("now xxx can run !!!\n"); } } } int main(int argc,char **argv) { pthread_t x; pthread_t y; sem_init(&sp,0,0); pthread_create(&x,NULL,(void *)xxx,NULL); pthread_create(&y,NULL,(void *)yyy,NULL); while(1) { sleep(1); } return 0; }
相关文章推荐
- 使用信号量 进行windows线程同步 (Semaphore)
- 使用信号量进行线程同步
- 线程同步之信号量(sem_init,sem_post,sem_wait)
- 使用信号进行同步 sem_post
- 线程同步之信号量(sem_init,sem_post,sem_wait)
- "Android下使用HttpUrlConntion"进行最简单的get,post请求(包括创建服务器)
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- Android学习之Http使用Post方式进行数据提交
- sqlmap使用post方法对cookie进行注入
- 使用信号量控制Linux线程同步
- [转载]改善C#程序的建议6:在线程同步中使用信号量
- Swift - 使用NSURL进行数据的提交和获取(POST与GET)
- JAVA中使用Apache HttpComponents Client的进行GET/POST请求使用案例
- 使用HttpURLConnection进行POST方式提交
- 【转载】C# 在线程同步中使用信号量
- android 使用xutils进行post请求出现的问题
- 如何使用java synchronized进行线程同步
- 使用BeanPostProcessor接口对受管Bean进行预处理
- HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应
- Android学习之Http使用Post方式进行数据提交