recursive-mutex

    4热度

    1回答

    我有一个案例,我的算法的决定是基于共享的深度std::recursive_mutex。 #include <iostream> #include <mutex> #include <thread> int g_i = 0; std::recursive_mutex g_i_mutex; void bar() { std::lock_guard<std::recursive_

    1热度

    1回答

    我在http://preshing.com/20120305/implementing-a-recursive-mutex以及http://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥体的文章,但这两篇文章都没有任何意义。 有人可以解释递归(可重入)互斥锁的工作原理吗? (我发现很少的材料解释互斥如何递归的作品。如果任何人有很好的解释

    4热度

    2回答

    我正在学校实验室工作,我们被指示为计数程序创建一个递归互斥锁。我写了一些代码(这不起作用),但我认为这主要是因为我不明白使用递归互斥锁的真正想法。任何人都可以详细说明递归互斥锁应该做什么/看起来像什么? 一般注意:我没有要求答案,只是一些关于递归互斥锁应该做什么的澄清。 此外,如果任何人都好奇,这里是所需的代码。我正在编辑/执行的代码是recmutex.c。 recmutex.h #include

    2热度

    1回答

    我可以创建并使用只有一个互斥锁属性来初始化多个递归互斥锁吗?或者我必须为每个我想创建的互斥体创建一个互斥属性? 基本上我下面的代码是正确的? int err; int bufferLength = 10; pthread_mutexattr_t recursiveAttr; pthread_mutex_t mutexes[bufferLength]; for(int index = 0;

    12热度

    2回答

    你能与std::condition_variable结合std::recursive_mutex,意义做这样的事情: std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex) some_condition_var.wait(lock); 如果它不允许的,那么为什么不呢? 我正在使用VC++ 11。

    2热度

    1回答

    我有一个类打开事务,将操作添加到队列中,然后关闭事务。在open-> close生命周期中,我想要使用递归互斥锁,以便只有一个线程可以随时打开一个事务。所有其他线程都会被阻塞,直到当前事务结束。 class MyObject { void beginTransaction() { // acquire mutex } void endTrans

    1热度

    2回答

    我读的书“C++并发在行动”,并有关于在上市6.1使用的互斥体的一些问题,代码片段如下: void pop(T& value) { std::lock_guard<std::mutex> lock(m); if(data.empty()) throw empty_stack(); value=std::move(data.top()); data.pop(

    2热度

    4回答

    我在我的程序中遇到了死锁问题。所以我一直在阅读关于锁的问题,但问题是大多数信息不一致或者没有定义平台。在Recursive Lock (Mutex) vs Non-Recursive Lock (Mutex)最接受的回答说: 由于递归互斥有主人翁意识,在线程 抓住互斥必须是释放互斥锁在同一个线程。在 非递归互斥体的情况下,没有所有权意识,任何线程通常都可以释放该互斥体,无论哪个线程本来是 接受互斥

    0热度

    2回答

    根据POSIX,我可以静态初始化一个互斥这样: pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; 不过,如果我想要的互斥是递归的?互斥量是非递归的默认值,并且无法为静态初始化提供互斥属性。

    2热度

    1回答

    [thread.mutex.recursive]引用: 拥有一个recursive_mutex对象可以通过调用该对象上lock()或try_lock()获取所有权的附加级别的线程。没有说明单个线程可以获得多少所有权级别。如果线程已获得recursive_mutex对象的最大所有权级别,则对try_lock()的其他调用将失败,对lock()的额外调用将​​抛出类型为system_error的异常。