请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?

时间:2021-09-06 12:13:00
如果一个线程在获取信号量时阻塞,是不是整个进程就阻塞了,也就是所有的线程同时阻塞,整个程序再无法往下执行??谢谢

7 个解决方案

#1


#2


不是,我们公司的程序大多是这样做的

#3


我说的是信号量(semaphore),不是sem_t 定义的信号灯.

#4


怎么没人回答啊?

#5


just try it!

#6


如果你使用的是系统的信号量,他是系统级的,可以在不同的进程间实现同步,当然也可以在同一个进程的不同线程间同步。
而对于阻塞问题,要看你线程的实现机制。linux的线程有两种实现机制,用户级和核心级。如果是用户级线程,则如果进程的任何一个线程阻塞,其他线程也会阻塞。

具体的你要在你的环境里测试了。

#7


理论上是。 信号量的阻塞是进程级的。

但如果你用的是linux那就不是。因为linux得线程也有pid,其实就是进程。

#1


#2


不是,我们公司的程序大多是这样做的

#3


我说的是信号量(semaphore),不是sem_t 定义的信号灯.

#4


怎么没人回答啊?

#5


just try it!

#6


如果你使用的是系统的信号量,他是系统级的,可以在不同的进程间实现同步,当然也可以在同一个进程的不同线程间同步。
而对于阻塞问题,要看你线程的实现机制。linux的线程有两种实现机制,用户级和核心级。如果是用户级线程,则如果进程的任何一个线程阻塞,其他线程也会阻塞。

具体的你要在你的环境里测试了。

#7


理论上是。 信号量的阻塞是进程级的。

但如果你用的是linux那就不是。因为linux得线程也有pid,其实就是进程。