C 以独占方式从多个线程访问资源

C 以独占方式从多个线程访问资源,c,linux,pthreads,signals,C,Linux,Pthreads,Signals,对于线程是否有与SIGSTOP和SICONT等价的东西?我正在使用pthreads。 谢谢 编辑: 我正在线程之间实现一种粗略的文件访问同步。因此,如果一个线程已经打开了一个文件,而另一个线程想要再次打开它,那么我需要在第二个线程执行时停止或暂停它。当第一个线程完成其工作时,它将检查其他线程想要使用它发布的文件并“唤醒”它们。然后,第二个线程恰好从该点恢复执行。我使用自己的簿记数据结构 嗯,有 但你几乎肯定不想这样做。如果另一个线程持有(例如)堆的互斥锁,并且您试图在它停止时调用new,该怎么办

对于线程是否有与SIGSTOP和SICONT等价的东西?我正在使用pthreads。 谢谢

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

嗯,有

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

由于您不知道运行时如何处理互斥体,因此除非完全避免使用标准库,否则通常无法避免此类问题

[编辑]

实际上,仔细想想,我不确定如果使用
SIGSTOP
将特定线程作为目标会发生什么,因为该信号通常会影响整个过程


所以,为了更新我的答案,我不相信有任何标准机制可以异步挂起线程。。。基于上述原因,我认为您不需要它。

根据您的应用程序,Pthreads支持可以被视为更精细的机制,例如和互斥机制。我将告诉您如何操作,而不是回答这个问题。(查找“X Y问题”。)

您试图阻止两个线程同时访问同一文件。换句话说,访问是相互排斥的。设计了一个“互斥”来实现这一点。一般来说,如果您搜索您正在尝试做的事情(防止两个线程同时访问同一资源),而不是搜索您希望如何做(让一个线程等待另一个线程),则更容易找到帮助

编辑:听起来你实际上想要的是很多读者,而不是一个作家。这可能是第二个最常见的同步问题(仅次于“生产者-消费者”问题)。使用
pthread\u rBlock
:读卡器调用
pthread\u rBlock
,写卡器调用
pthread\u rBlock

如果你在做这么复杂的事情,你真的应该开始阅读相关文献。如果你认为你能认真阅读多线程编程,你比我聪明得多,你不需要我的帮助。我推荐免费下载的《信号灯小书》。这与pthread无关,但它是好东西。您所询问的读者-作者问题在“经典同步问题”一章的§4.2中找到(见鬼,这个问题甚至在简介中提到)


多线程编程非常难,有大写字母和粗体。

非常感谢。但是,它比那稍微复杂一点。我允许多个读卡器同时访问文件,但只有一个写卡器,而且可能有多个线程等待访问文件。所以这里有一个队列。@Juggler:那么您需要的是一个队列,每个现代线程库都提供了这个队列;例如。编辑:迪特里希击败了我:-)顺便说一下+1。没有所谓的“原始”同步。只有“正确的”和“不正确的”同步…谢谢…我知道其中涉及的困难,但我必须这样做,也要在特定的时间内这样做。谢谢你的指点