【发布时间】:2013-03-20 22:29:12
【问题描述】:
我有一个全局变量flag、一个函数this()和一个函数that()。现在,main()、this() 和that() 都有需要读取和/或写入flag 的场合。要正确使用互斥锁,我需要:
- 声明一个
pthread_mutex_t并初始化它。 - 为
this()和that()和pthread_join()创建线程,因为我希望main()在退出之前等待this()和that()完成。 - 代码中的任何位置,无论是
main()、this()还是that(),其中flag正在被读取或写入,调用pthread_mutex_lock()然后[读/写]flag然后调用@987654341 @
对吗?
我不打算这样做,但如果我想像这样在main() 中无限循环地检查flag:
while(flag != value)
continue;
lock() 和 unlock() 互斥锁在哪里?其他线程是否有机会访问 flag,而 main() 会一直这样?
【问题讨论】:
-
你会想要最后一个循环的 pthread 条件。
-
将 pthread 对象用于预期用途。互斥锁保护对某物(或某物)的访问,而条件变量用于向一个或多个潜在相关方发出谓词变化的信号。如果配合得当,你写出的任务既优雅又相当琐碎。