二进制信号量和互斥量之间是否存在差异,或它们基本相同?
互斥体是一种经常用于解决多线程问题的编程概念.我向社区提出的问题:
什么是互斥锁,你如何使用它?
我们何时应该使用互斥锁?什么时候应该使用信号量?
我将使用boost::mutex从boost/thread/mutex.hpp.有几种方法来锁定/解锁互斥:有scoped_lock,unique_lock,lock_guard,互斥的成员函数::lock()和::unlock()和非成员函数lock()和unlock().
我注意到,这boost::scoped_mutex是使用互斥锁的最流行的方法之一.为什么是最好的成员函数::lock()和::unlock()?
特别是,我为什么要使用
{
  boost::scoped_lock lock(mutex)
  // ...
  // read/output sharing memory.
  // ...
}
而不是
mutex.lock()
// ...
// read/output sharing memory.
// ...
mutex.unlock()
是scoped_lock因为某些样式编码的观点还是::lock()/::unlock()"线程安全不够" 而更好?
我有一个具有状态(一个简单的枚举)的类,可以从两个线程访问.为了改变状态,我使用互斥锁(boost :: mutex).检查状态是否安全(例如比较state_ == ESTABLISHED)还是在这种情况下我是否必须使用互斥锁?换句话说,当我只想读取一个可以由另一个线程同时写入的变量时,我是否需要互斥锁?
我阅读了一些关于Mutex的文档,但我唯一的想法是它有助于防止线程访问已被其他资源使用的资源.
我从Code片段获得并执行哪个工作正常:
#include <windows.h>
#include <process.h>
#include <iostream>
using namespace std;
BOOL FunctionToWriteToDatabase(HANDLE hMutex)
{
    DWORD dwWaitResult;
    // Request ownership of mutex.
    dwWaitResult = WaitForSingleObject(
    hMutex, // handle to mutex
    5000L); // five-second time-out interval
        switch (dwWaitResult)
        {
        // The thread got mutex ownership.
            case WAIT_OBJECT_0:
            __try
            {
                // Write to the database.
            }
            __finally {
            // Release ownership of the mutex object.
            if (! ReleaseMutex(hMutex)) {
            // Deal with error.
        }
            break;
        }
            // Cannot get mutex ownership due …如果我只有一个读者和一个作家,我需要互斥吗?读取器food.front()从队列中获取下一个command()并根据该命令执行任务.执行命令后,它会弹出命令.队列的编写者将命令推送到队列(food.push())上.
我需要互斥锁吗?我的读者(消费者)只执行if food.size() > 0.我正在使用读者线程并发送线程.
我已经在互联网上看过用于在Windows上用C++制作多线程应用程序的教程,以及在Linux上做同样的其他教程,但不是同时用于两者.是否有可以在Linux或Windows上编译的功能?
int x = 0 // global shared variable
T1: for (i=0; i++; i<100) x++;
T2: x++ // no loop, just one increment
T1和T2是单独的线程.我被告知x的最终值可以是1和101的值的任何值.这怎么可能?我想知道这可能只是1.
显然,执行顺序失败了,但我想知道是什么.