草庐IT

synchronization

全部标签

c++ - c++ 是否存在多生产者单消费者无锁队列?

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我读得越多,我就越困惑……我会认为找到一个用C++实现的正式正确的MPSC队列是微不足道的。每当我发现另一个问题时,进一步的研究似乎表明存在诸如ABA或其他微妙的竞争条件之类的问题。很多人都在谈论垃圾收集的必要性。这是我想避免的。那里有公认的正确开源实现吗? 最佳答案 您可能想检查破坏者;它在C++中可用:http://lmax-exchange.g

c++ - 在 C++11 中等待多个条件变量的最佳方法是什么?

首先介绍一下上下文:我正在学习C++11中的线程,为此,我正在尝试构建一个小的actor类,本质上(我把异常处理和传播的东西排除在外)像这样:classactor{private:std::atomicstop;private:std::condition_variableinterrupt;private:std::threadactor_thread;private:message_queueincoming_msgs;public:actor():stop(false),actor_thread([&]{run_actor();}){}public:virtual~actor()

c++ - 在 C++11 中等待多个条件变量的最佳方法是什么?

首先介绍一下上下文:我正在学习C++11中的线程,为此,我正在尝试构建一个小的actor类,本质上(我把异常处理和传播的东西排除在外)像这样:classactor{private:std::atomicstop;private:std::condition_variableinterrupt;private:std::threadactor_thread;private:message_queueincoming_msgs;public:actor():stop(false),actor_thread([&]{run_actor();}){}public:virtual~actor()

c++ - std::mutex 会创建栅栏吗?

如果我锁定了一个std::mutex,我总是会得到一个内存栅栏吗?我不确定这是否暗示或强制您获得围栏。更新:根据RMF的评论找到此引用资料。Multithreadedprogrammingandmemoryvisibility 最佳答案 据我了解,这包括在:1.10多线程执行和数据竞争第5段:Thelibrarydefinesanumberofatomicoperations(Clause29)andoperationsonmutexes(Clause30)thatarespeciallyidentifiedassynchronizat

c++ - std::mutex 会创建栅栏吗?

如果我锁定了一个std::mutex,我总是会得到一个内存栅栏吗?我不确定这是否暗示或强制您获得围栏。更新:根据RMF的评论找到此引用资料。Multithreadedprogrammingandmemoryvisibility 最佳答案 据我了解,这包括在:1.10多线程执行和数据竞争第5段:Thelibrarydefinesanumberofatomicoperations(Clause29)andoperationsonmutexes(Clause30)thatarespeciallyidentifiedassynchronizat

c++ - 在 C/C++ 共享内存中等待和通知

如何在C/C++中的Java中等待和通知两个或多个线程之间的共享内存?我使用pthread库。 最佳答案 您需要两个对象,而不是用于等待/通知的Java对象:互斥体和条件变量。这些是用pthread_mutex_init和pthread_cond_init初始化的。如果您需要在Java对象上进行同步,请使用pthread_mutex_lock和pthread_mutex_unlock(请注意,在C中您必须自己手动配对)。如果您不需要等待/通知,只需锁定/解锁,那么您不需要条件变量,只需互斥锁。请记住,互斥锁不一定是“递归的”,这意味

c++ - 在 C/C++ 共享内存中等待和通知

如何在C/C++中的Java中等待和通知两个或多个线程之间的共享内存?我使用pthread库。 最佳答案 您需要两个对象,而不是用于等待/通知的Java对象:互斥体和条件变量。这些是用pthread_mutex_init和pthread_cond_init初始化的。如果您需要在Java对象上进行同步,请使用pthread_mutex_lock和pthread_mutex_unlock(请注意,在C中您必须自己手动配对)。如果您不需要等待/通知,只需锁定/解锁,那么您不需要条件变量,只需互斥锁。请记住,互斥锁不一定是“递归的”,这意味

c++ - 与 win32 CRITICAL_SECTION 相比的 std::mutex 性能

std::mutex的性能与CRITICAL_SECTION相比如何?是否符合标准?我需要轻量级同步对象(不需要是进程间对象)除了std::mutex之外,是否有任何接近CRITICAL_SECTION的STL类? 最佳答案 请在答案末尾查看我的更新,自VisualStudio2015以来情况发生了巨大变化。原始答案如下。我做了一个非常简单的测试,根据我的测量结果,std::mutex比CRITICAL_SECTION慢了大约50-70倍。std::mutex:18140574usCRITICAL_SECTION:296874us编

c++ - 与 win32 CRITICAL_SECTION 相比的 std::mutex 性能

std::mutex的性能与CRITICAL_SECTION相比如何?是否符合标准?我需要轻量级同步对象(不需要是进程间对象)除了std::mutex之外,是否有任何接近CRITICAL_SECTION的STL类? 最佳答案 请在答案末尾查看我的更新,自VisualStudio2015以来情况发生了巨大变化。原始答案如下。我做了一个非常简单的测试,根据我的测量结果,std::mutex比CRITICAL_SECTION慢了大约50-70倍。std::mutex:18140574usCRITICAL_SECTION:296874us编

c++ - 如何从更基本的同步原语制作多读/单写锁?

我们发现,在我们的代码中有几个地方,对受互斥体保护的数据的并发读取相当普遍,而写入却很少见。我们的测量似乎表明,使用简单的互斥锁会严重影响读取该数据的代码的性能。所以我们需要的是一个多读/单写互斥锁。我知道这可以建立在更简单的原语之上,但在我尝试这样做之前,我宁愿询问现有的知识:用更简单的同步原语构建多读/单写锁的认可方法是什么?我确实知道如何制作它,但我更希望得到不受我(可能是错误地)提出的答案的偏见。(注意:我期望的是如何做到这一点的解释,可能是伪代码,而不是完整的实现。我当然可以自己编写代码。)注意事项:这需要有合理的性能。(我的想法是每次访问都需要两次锁定/解锁操作。现在这可能