当前位置: 技术问答>linux和unix
请教一个线程同步问题
来源: 互联网 发布时间:2016-04-15
本文导语: void* process(void *arg) { int num; num = *((int*)arg); process(num); } main(){ while( 1 ) { int sockfd; tmp_sockfd = sockfd; retval = pthread_create( &pthread_id,...
void* process(void *arg)
{
int num;
num = *((int*)arg);
process(num);
}
main(){
while( 1 )
{
int sockfd;
tmp_sockfd = sockfd;
retval = pthread_create( &pthread_id, NULL, porcess, (void*)(&tmp_sockfd) );
sockfd++;
}
}
主线程给一个线程传递一个参数sockfd,主线程又在不断的更新参数,请问一下,如何保证线程在处理参数process(num)过程中主线程没有修改参数?(也可以说是线程再把参数转存之前主线程还没有修改该参数)
我在线程里面用num = *((int*)arg); 目的是尽快把参数值转存到另一个变量中,但是这并不能保证参数在转存之前不会被修改,因为主线程运行很快。
如果采用互斥锁,那么锁又该加在哪里啊?
谢谢!
|
你的哪部分代码会引起冲突,就把那部分锁起来。
|
static int flag = 1;
int sem_post()
{
flag = 1;
return 0;
}
int sem_pend()
{
while(!flag)
{
usleep(50);
}
flag = 0;
return;
}
在tmp_sockfd = sockfd前调用sem_pend()
在num = *((int*)arg)后调用sen_post().
done