让所有的孩子从另一个孩子的线程中睡觉

时间:2015-01-05 06:35:23

标签: c multithreading pthreads thread-sleep

我正在尝试使用POSIX线程开发一个程序,其中我有一个子线程,它将在某些间隔之间更新文件和数据库的内容,并且将有其他子项从文件和数据库读取所有数据时间。所以我不希望任何线程在单个更新程序线程写入时读取文件或数据库。所以我的想法是让所有其他子线程从子线程中休眠,这将更新文件和数据库。 sleep()使调用线程休眠。有没有办法实现上述方案?!

修改

我有两个不同的函数来读写文件。大多数线程访问read方法,因此它们不容易受到攻击,但是如果它们在访问write方法的周期性线程更新文件的内容时尝试读入它们,则可能是它们。

1 个答案:

答案 0 :(得分:2)

您根本不想使用sleep。而是使用读/写锁。更新程序线程必须在修改数据之前获取锁定(处于写入模式)。其他线程必须在读取数据之前获取锁定(处于读取模式)。

请注意,如果您的读者线程正在连续阅读,那么编写者将会饿死并且永远不会获得锁定。因此,您需要一些单独的机制,例如更新程序可以设置的标志,告诉读者请停止阅读并释放锁定。如果读者偶尔阅读这不应该是这样的问题(除非有大量的读者,在这种情况下你可能会遇到架构问题)。