【发布时间】:2011-08-25 10:24:05
【问题描述】:
我想知道是否有办法在 C++(或 C#)中实现信号量,任何有帮助的库。我尝试使用 OpenMP,但实际上无法阻塞线程,而是我不得不忙着等待它们,如果/当我没有足够数量的线程时,这会导致死锁。所以首先我正在寻找一个可以让我阻止/生成/杀死我的线程的库。
其次,是否有任何库已经实现了信号量?
最后,当我被介绍到信号量的上下文时,我发现它非常有用(也许我错了?)但我没有看到很多库(如果有的话)实现它。我熟悉 OpenMP,查看了 Intel 的 TBB、C# 线程。但在这些中,我没有明确地看到信号量。那么信号量不是我想的那么实用吗?还是它们难以实施?还是我不知道?
附:
信号量可以跨平台实现吗?因为它们可能与操作系统有关。
【问题讨论】:
-
OpenMP 中有
omp_set_lock/omp_unset_lock,pthread 支持互斥锁(TBB 几乎肯定也支持,尽管我从未使用过)。最后,如果您不反对 Boost,则可以使用其中的信号量和互斥量实现。上述所有内容都是跨平台的(分层 OS 特定功能)。一般来说,如果没有依赖于操作系统的代码,您就无法实现非忙同步,但这正是这些库的用途。 -
@Damon 我对 OMP 锁很熟悉,但是如果你稍微研究一下,你会发现一个线程无法取消它没有设置的锁。
-
这是正确的,但即使有这个限制,它仍然为您提供了实现任何其他同步所需的基本功能。当然,我提到的其他库在这方面更加用户友好。
标签: c# c++ implementation semaphore