草庐IT

init_MUTEX

全部标签

c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?

这个问题在这里已经有了答案:boost::threaddatastructuresizesontheridiculousside?(4个答案)关闭9年前。而不是sizeof(std::atomic)==1?可以通过简单的std::atomic实现互斥锁。,所以我认为互斥锁的大小可以这么小,或者可能是4(32位)。

c++ - 使用 brace-init 初始化对 std::shared_ptr 的引用

这个问题在这里已经有了答案:Whycan'tIinitializeareferenceinaninitializerlistwithuniforminitialization?(3个答案)关闭8年前。我最近在编写代码,无意中发现了GCC和Clang中的一些不寻常之处。使用brace-init会在gcc中触发编译错误,而直接初始化如&b=a会起作用。下面的代码是我遇到的这种行为的一个非常简单的例子,我想知道为什么GCC不编译代码,因为没有一个shared_ptr采用initializer_list而a是一个左值#include#includeintmain(){std::shared_p

kotlin - 在 init block 中如何处理被覆盖的属性?

我试图理解为什么会抛出以下代码:openclassBase(openvalinput:String){lateinitvarderived:Stringinit{derived=input.toUpperCase()//throws!}}classSub(overridevalinput:String):Base(input)当像这样调用这段代码时:println(Sub("test").derived)它抛出异常,因为在调用toUpperCase时,input解析为null。我发现这个反直觉:我将一个非空值传递给主构造函数,但在父类(superclass)的initblock中它解析

kotlin - 在 init block 中如何处理被覆盖的属性?

我试图理解为什么会抛出以下代码:openclassBase(openvalinput:String){lateinitvarderived:Stringinit{derived=input.toUpperCase()//throws!}}classSub(overridevalinput:String):Base(input)当像这样调用这段代码时:println(Sub("test").derived)它抛出异常,因为在调用toUpperCase时,input解析为null。我发现这个反直觉:我将一个非空值传递给主构造函数,但在父类(superclass)的initblock中它解析

c++ - 我如何获得废弃的 boost::interprocess::interprocess_mutex 的所有权?

我的场景:一台服务器和一些客户端(虽然不多)。服务器一次只能响应一个客户端,因此他们必须排队。我正在使用互斥量(boost::interprocess::interprocess_mutex)来执行此操作,它封装在boost::interprocess::scoped_lock中。问题是,如果一个客户端在持有互斥量时意外死亡(即没有析构函数运行),其他客户端就会有麻烦,因为它们正在等待该互斥量。我考虑过使用定时等待,所以如果我的客户端等待20秒但没有获得互斥锁,它会继续与服务器通信。这种方法的问题:1)它每次都这样做。如果它处于循环中,不断与服务器对话,则每次都需要等待超时。2)如果有

c++ - SDL Video Init 在 Mac OS X 10.8 上导致异常

我刚刚将我的C++游戏移植到OSX,它第一次运行时,我在尝试调用SDL_SetVideoMode时遇到以下异常。2012-09-2815:01:05.437SCRAsteroids[28595:707]*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“错误(1000)在第259行创建CGSWindow”*首先抛出调用栈:(0CoreFoundation0x00007fff8b53b716__exceptionPreprocess+1981libobjc.A.dylib0x00007fff90e30470objc_excepti

c++ - 为什么传递对 Mutex 类的引用不是一个好的设计?

来自这里:LogicerrorinmydefinedMutexclassandthewayIuseitinproducerconsumerprogram-pthreadsthewayyoupassaroundreferences(!)toyourmutexclassisplainlyaskingfortrouble,itdefiesanykindofencapsulation.为什么这是个问题?我应该按值传递然后编写复制构造函数吗?在这种情况下,缺乏封装会造成什么危害?我应该如何封装什么?此外,WhyispassingreferencestotheMutexclassnotagoodd

c++ - 使用 ATOMIC_FLAG_INIT 和 std::atomic_flag::clear 有什么区别

下面两段代码是否相同:std::atomic_flaglock=ATOMIC_FLAG_INIT;和std::atomic_flaglock;lock.clear();似乎第二个可以允许点击几下锁定处于未知状态第一个代码片段是否始终具有已知状态? 最佳答案 ATOMIC_FLAG_INIT是一个实现定义的宏,保证可以像您发布的那样在表达式中工作。例如,它可以方便地初始化您可能在命名空间范围内定义的atomic_flag。它还保证标志将被清除,并且如果标志本身具有静态存储持续时间,则初始化也将是静态的。第二组语句是初始化,然后清除标志

c++ - 将 boost::thread 与 C++11 std::mutex 混合使用是否安全?

在通过boost启动其线程的程序中使用std::mutex及其同类是否安全?(使用std::thread不是我的选择(我认为),因为应用程序需要大量堆栈空间,并且在某些平台上需要在创建时覆盖默认堆栈大小。) 最佳答案 是的,您可以在使用boost::thread创建的线程中使用std::mutex。 关于c++-将boost::thread与C++11std::mutex混合使用是否安全?,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 为什么 std::mutex 比 CRITICAL_SECTION 慢两倍

std::mutex是用关键部分实现的,这就是为什么它比OSMutex(在Windows上)快得多。但是它不如WindowsCRITICAL_SECTION快。计时只是一个线程中的一个紧密循环:423.76nsATLCMutex41.74nsstd::mutex16.61nswin32CriticalSection我的问题是std::mutex还做了什么?我查看了来源,但无法理解。然而,在它服从CritSec之前还有额外的步骤。我的问题是:这些额外的步骤是否有用?也就是说,额外的步骤是什么?使用CRITICAL_SECTION我会错过什么?还有,如果它不是用Mutex实现的,为什么他们