osx下信号量和锁无法使用的替代品

2016-11-07 21:56:11来源:CSDN作者:ylqhust人点击

osx下进行同步的时候,无论是使用pthread_mutex_t还是sem_t 都无法满足要求,pthread_mutex_t根本就没用,sem_t 只能使用sem_open进行非匿名信号量初始化,但也无法解决同步问题,还是会造成错误,在stackoverflow上看到一个好方法,可以解决这个问题,
使用dispatch_semaphore_t。具体测试代码如下

/** main.c **/#include <stdio.h>#include <pthread.h>#include <dispatch/dispatch.h>int _times=1000000;int a=0;dispatch_semaphore_t semaphore;void xx(const char *x){printf("%s %d/n",x,a);}void f(){  for(int i=0;i<_times;++i){dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);++a;dispatch_semaphore_signal(semaphore);  }  xx("f");  return;}int main(int argc, const char * argv[]) {  pthread_t p;  semaphore = dispatch_semaphore_create(1);  pthread_create(&p,0, f,0);  for(int i=0;i<_times;++i){    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);    ++a;    dispatch_semaphore_signal(semaphore);  }  xx("main");  pthread_join(p,0);  dispatch_release(semaphore);  return 0;}

使用sem_t的时候,最后输出结果不是200000,但是使用上面的代码,输出是200000

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台