linux下多线程同步问题


先贴代码:

   
  for(i=0;i<MAXSOCKNUM;i++)
  
{
if(FD_ISSET(client_socket[i],&fdset))
{
client_sock=client_socket[i];
printf("the client_sock is %d,the i is %d\n",client_sock,i);
pthread_create(&thread1,NULL,(void *)&operate,&client_sock);
sleep(1);
client_socket[i]=0;
}
}

这是我程序中的一部分,是这样,我希望程序执行到创建进程这一步时,将client_sock带入到operate()之后才执行主线程,即阻塞一下,但是我又不想等operate()全部执行完毕再执行下边,所以pthread_join()就不再适用了,于是我想出了一个sleep的方法,但是这个等待时间不好把握,时间太长,我的执行效率肯定越低,时间越短的话,如果系统有个什么扰动,很容易数据就会错位

请问大家有什么好的方法吗?

Linux socket

Lipili 11 years, 8 months ago

我想了几个方法:

  1. 用malloc分配一个空间,把client_socket[i]复制进去,交给operate处理后来释放。
  2. 直接把client_socket[i]强转成(void *)
  3. 用pthread的条件变量,需要把条件变量和client_socket[i]传给operate,把sleep换成pthread_cond_wait,然后在operate里唤醒

感觉方法2最简单。

哔哩哩哔哩 answered 11 years, 8 months ago

Your Answer