解决linux下WaitForMultipleObjects的一种方法

借助了linux下的Semaphore(信号量),实现了一种简单的WaitForMultipleObjects。
关于Semaphore参考如下的文章:
http://blog.163.com/wulin_shenghua/blog/static/27580770200952644311771/

具体思想:多个线程共享一个信号量,子线程结束后让信号量+1,主线程做n次信号量-1的操作(为0的时候会自动等待),等到做完n次-1,说明n个子线程都完成了+1,说明全部子线程都执行完了,就可以继续了。
这只是WaitForMultipleObjects的一种简单替代,因为没有返回值,所以不能判断某个线程出问题与否。

#include #include
#include
#include
using namespace std;

typedef struct pinfo
{
sem_t * bin_sem;
int id;
}pinfo;

void *thread_function(void *arg)
{
pinfo *t=(pinfo*)arg;
printf("thread_functiont%dt--------------sem_waitn",t->id);
int ii=t->id + 1;
sleep(ii); //暂停一会,这里模拟程序执行
sem_post(t->bin_sem); //信号量+1
printf("sem_donet%dn",t->id);
return NULL;
}

int main()
{
int res;
int n=10; //设置个线程
sem_t bin_sem; //设置信号量,下面初始化这个信号量

res = sem_init(&bin_sem, 0, 0);

if (res != 0)
{
perror("Semaphore initialization failed");
}
printf("sem_initn");
int i;
pinfo *p=new pinfo[n]; //创建个线程的参数结构体
pthread_t *a_thread=new pthread_t[n];
for(i=0;i

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注