相关疑难解决方法(0)

二进制信号量和互斥量之间的区别

二进制信号量和互斥量之间是否存在差异,或它们基本相同?

glossary operating-system mutex semaphore binary-semaphore

787
推荐指数
19
解决办法
56万
查看次数

锁定,互斥,信号量...有什么区别?

我听说过这些与并发编程有关的词,但它们之间的区别是什么?

concurrency mutex semaphore locking

395
推荐指数
9
解决办法
21万
查看次数

当递减到零的进程崩溃时,如何恢复信号量?

我有多个使用g ++编译的应用程序,在Ubuntu中运行.我正在使用命名信号量来协调不同的进程.

一切正常,除非在以下情况下:如果其中一个进程调用sem_wait()sem_timedwait()减少信号量然后在它有机会调用之前崩溃或被杀死-9 sem_post(),那么从那一刻起,命名信号量就"无法使用".

通过"不可用",我的意思是信号量计数现在为零,并且应该将其增加回1的过程已经死亡或被杀死.

我找不到一个sem_*()API,可能会告诉我上次减少崩溃的过程.

我在某个地方错过了API吗?

以下是我打开命名信号量的方法:

sem_t *sem = sem_open( "/testing",
    O_CREAT     |   // create the semaphore if it does not already exist
    O_CLOEXEC   ,   // close on execute
    S_IRWXU     |   // permissions:  user
    S_IRWXG     |   // permissions:  group
    S_IRWXO     ,   // permissions:  other
    1           );  // initial value of the semaphore
Run Code Online (Sandbox Code Playgroud)

这是我如何减少它:

struct timespec timeout = { 0, 0 };
clock_gettime( CLOCK_REALTIME, &timeout );
timeout.tv_sec += 5;

if …
Run Code Online (Sandbox Code Playgroud)

linux gcc semaphore g++

47
推荐指数
3
解决办法
3万
查看次数

pthread互斥体的"属性"是什么?

函数pthread_mutex_init允许您指定指向属性的指针.但我还没有找到pthread属性的详细解释.我总是提供NULL.这个论点有用吗?

文档,对于那些忘记它的人:

PTHREAD_MUTEX_INIT(3)BSD库函数手册
PTHREAD_MUTEX_INIT(3)

名称pthread_mutex_init - 创建互斥锁

概要

 #include <pthread.h>

 int
 pthread_mutex_init(pthread_mutex_t *restrict mutex,
     const pthread_mutexattr_t *restrict attr);
Run Code Online (Sandbox Code Playgroud)

说明pthread_mutex_init()函数创建一个新的互斥锁,其属性由attr指定.如果attr为NULL,则使用默认属性.

attributes mutex pthreads

25
推荐指数
2
解决办法
3万
查看次数

在pthread_mutex_init之前调用pthread_mutex_lock是否安全?

我之前从未有机会使用pthreads库,但我正在审查一些涉及pthread互斥体的代码.我检查了文档pthread_mutex_lockpthread_mutex_init,和我从阅读的手册页这两种功能的理解是,我得叫pthread_mutex_init我打电话之前pthread_mutex_lock.

但是,我问了几个同事,他们认为在打电话pthread_mutex_lock之前打电话是可以的pthread_mutex_init.我正在审查的代码也pthread_mutex_lock没有打电话pthread_mutex_init.

基本上,在打电话pthread_mutex_lock之前打电话pthread_mutex_init是否安全和聪明(如果pthread_mutex_init被调用的话)?

编辑:我还看到一些示例,其中未使用pthread_mutex_lock时调用pthread_mutex_init,例如此示例

编辑#2:这是我正在审查的代码.请注意,configure函数获取并附加到某些未初始化的共享内存.稍后将使用Java代码调用lock(),而不会在其间调用其他本机函数.链接到代码

c mutex pthreads

8
推荐指数
2
解决办法
4409
查看次数

进程退出后 POSIX 名称信号量不会释放

我正在尝试使用 POSIX 命名信号量进行跨进程同步。我注意到进程死亡或退出后,信号量仍然被系统打开。

在进程(打开它)死亡或退出后是否有办法使其关闭/释放?

c linux posix semaphore ipc

6
推荐指数
2
解决办法
7435
查看次数

将mutexes/semaphores与进程一起使用

到目前为止,我在线阅读的几乎所有代码和教程都涉及使用互斥锁和信号量来实现线程之间的同步.它们可以用于在进程之间进行同步吗?

我想编写看起来像这样的代码:

void compute_and_print() {
   // acquire mutex
   // critical section
   // release mutex
}

void main() {
int pid = fork();
if ( pid == 0 ) {
  // do something
  compute_and_print();
}
else {
  // do something
  compute_and_print();
}
}
Run Code Online (Sandbox Code Playgroud)
  • 有人能指出我这样做的类似代码吗?
  • 我知道不同的进程有不同的地址空间,但我想知道上面是不同的地址空间,但是,互斥量不会引用相同的内核对象吗?

linux mutex ipc process

5
推荐指数
1
解决办法
1万
查看次数

STL中boost interprocess的named_mutex相当于什么

我有一个应用程序,其中实现了 boostnamed_mutex 来锁定 C++ 项目(Visual Studio)中的多个模块。我需要不惜一切代价删除所有增强依赖项。

我还有其他方法可以实现吗?顺便说一句,如果可能的话,我正在使用 C++11

c++ boost stl c++11

5
推荐指数
1
解决办法
2892
查看次数

使用pthreads进行进程间互斥

我想使用一个互斥锁,它将用于同步访问驻留在内存中的一些变量,这两个变量共享两个不同的进程.我怎样才能做到这一点.要执行的代码示例将非常感激.

c linux pthreads

3
推荐指数
2
解决办法
1万
查看次数