SIGSTOP和SIGCONT等效于线程

时间:2011-06-16 05:02:26

标签: c linux pthreads signals

是否有类似于线程的SIGSTOP和SICONT的东西?我正在使用pthreads。 感谢

编辑: 我正在线程之间实现文件访问同步的粗略形式。因此,如果一个文件已经被一个线程打开,而另一个线程想再次打开它,我需要暂停或暂停第二个线程的执行。当第一个线程完成其工作时,它将检查其他线程想要使用它发布的文件并“唤醒”它们。然后第二个线程从那个点恢复执行。我用自己的书保存数据结构。

3 个答案:

答案 0 :(得分:7)

我要告诉你如何做事而不是回答问题。 (查看“X Y问题”。)

您正在尝试阻止两个线程同时访问同一文件。换句话说,访问是完全独立的。 “互斥体”旨在实现此目的。通常,如果您搜索要执行的操作(防止两个线程同时访问同一资源)而不是搜索您想要执行的操作(让一个线程等待另一个线程),则更容易找到帮助。

编辑:听起来你真的想要很多读者而不是一位作家。这可能是第二个最常见的同步问题(在“生产者 - 消费者”问题之后)。使用pthread_rwlock:读者致电pthread_rdlock,作者致电pthread_wrlock

如果你正在做一些复杂的事情,你真的应该开始阅读相关的文献。如果你认为你可以做多线程编程一些认真的阅读,你比我聪明,你不需要我的帮助。我推荐“The Semaphores的小书”,这是一个免费下载(source)。这不是关于pthreads,但它是好东西。您要问的读者 - 作者问题可以在“经典同步问题”一章的§4.2下找到(哎呀,这个问题甚至在模糊中提到过。)

多线程编程 HARD ,大​​写字母和粗体字。

答案 1 :(得分:1)

嗯,有pthread_kill

但你几乎肯定不想这样做。如果另一个线程保存(例如)堆的互斥锁,并且在它停止时尝试调用new该怎么办?

由于您不知道运行时对互斥锁的作用,除非您完全避免使用标准库,否则通常无法避免此类问题。

[编辑]

实际上,想一想,我不确定如果你使用SIGSTOP定位一个特定的线程会发生什么,因为这个信号通常会影响整个过程。

所以为了更新我的答案,我不相信有任何异步挂起线程的标准机制......由于上面提到的原因,我认为你不想要一个。

答案 2 :(得分:1)

根据您的应用程序,Pthreads支持可被视为更精致的机制,例如http://www.unix.com/man-page/all/3t/pthread_suspend/和互斥机制