这两种情况之间有什么区别? 我不知道该使用哪个。 看来他们基本上是在做同样的事情。

pthread_lock(&mutex)
critical section
pthread_unlock(&mutex)

VS

sem_wait(&mutex)
section
sem_post(&mutex)

===============>>#1 票数:2

其他答案忘记提及的是,信号量没有“所有者”。 互斥锁通常具有锁的所有者,因此只有锁定它的线程才能将其解锁。 信号量只是计数器。

===============>>#2 票数:1

Mutex一次仅允许一个线程访问关键部分。

信号量允许更多的并发。 例如解决读者和作家的问题-请参阅http://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem

===============>>#3 票数:1

互斥锁通常是二进制的,而信号量可以初始化为大于1的值。实际上,这意味着一个以上的线程可以同时持有信号量的锁,而互斥锁则不可能。 希望有帮助!

===============>>#4 票数:0

有时互斥锁会提供优先级提升,以防止优先级倒置,而信号量则不会。 在我的RTOS中,这是我选择一个而不是另一个的主要原因。

  ask by user3552926 translate from so

未解决问题?本站智能推荐:

2回复

用互斥锁和不同的生存期创建多个线程

我怎样才能使这段代码做同样的事情,而是使用pthread和互斥锁? 我们被要求制作一个具有id(应该有6个线程,每个线程睡眠不同的时间),sec(睡眠时间)和int signal [6]的struct方法。 这是一项学校任务,我们没有进行任何c培训。 请帮忙。
6回复

互斥和信号量实际上做了什么?

我想要一些关于互斥和信号量的澄清。 我的问题是, 当线程试图进入由互斥锁锁定的区域时,互斥锁实际上做了什么。 它等待锁被释放? 或b。 它会进入睡眠状态,直到释放锁定为止。 在那种情况下,如何在释放锁定时再次唤醒? 与1相同的问题,但在这种情况下它是信号量。
2回复

使用全信号量程序而不是互斥体和cond_t

我是C语言的初学者,而我只是在读一本书后才学更多。 我必须互斥锁和条件变量之类的东西。 我在书中看到一个练习,该练习说将具有互斥锁并有条件的程序切换为使用信号量的程序,以实现相同的结果。 我目前处于困境,因为在运行代码时,我相信自己处于“僵局”的状态,此后什么也没发生。 我不确定发生了什
1回复

初始化互斥锁时,在一个简单的生产者使用者示例中出现错误[重复]

可能重复: C ++成员函数中的PTHREAD_MUTEX_INITIALIZER无法编译? 我正在尝试用POSIX线程和信号量实现生产者/消费者问题,但我遇到以下错误: 我检查了我的代码,但看不到该错误的原因。 这是代码:
6回复

pthread_mutex_lock / unlock的性能

我注意到,当我有一个锁定和解锁线程ALOT的算法时,我的性能得到了很大的提升。 有没有办法帮助这个开销? 使用信号量会更多/更低效吗? 谢谢
1回复

使用互斥和信号量的屏障实现

这是一个采访问题:使用互斥量和信号量在n线程之间实现屏障。 我提出的解决方案: 那可以解决吗? 可以仅使用互斥体来实现屏障吗?
1回复

为什么我的互斥锁没有在其他线程将其锁定之前锁定?

我正在运行1个使用pthreads创建的线程,并且在该线程和主线程之间使用了互斥锁。 据我了解,一旦线程准备好锁定互斥锁,它将自旋锁定,直到能够锁定为止。 但是我遇到了一个问题,那就是它没有自旋锁。 我有伪代码。 主线程: 线程1: 我遇到的问题是线程1互斥锁永远不会
1回复

AIX是互斥体吗?

第一个问题:ipcs -s将显示有关正在使用的pthread互斥锁的任何信息吗? 我问是否在AIX信号量之上实现了pthread互斥锁,或者反之亦然。 有人发现了一些信号量(使用ipcs),并且表明它可能在我们的库中。 但是,我们不使用semxxx,而是使用pthread互斥锁。
1回复

“pthread_mutex_t mutex = {0}”初始化互斥锁吗?

是否可以通过这种方式初始化互斥锁: 以下3个互斥锁初始化有什么区别:
3回复

具有互斥锁的多个锁和可能发生死锁

我是线程新手并试图理解互斥锁。 我理解互斥锁是一个只被一个线程挑选的对象(密钥)(如果它被挑选然后其他线程无法选择它并且必须等待)来访问我们想要锁定的代码的某些部分。 因此,当时只有一个线程可以访问该锁定的代码部分(例如共享计数器)。 其他线程必须等到互斥锁解锁等等。 如果我写