草庐IT

pthread_once

全部标签

c++ - 在 g++ 中是在后台使用 pthreads 的 C++ 11 线程模型吗?

我只是在尝试g++4.6和C++11功能。每次我使用-std=c++0x标志编译一个简单的线程代码时,它要么因段错误而崩溃,要么只是抛出一些奇怪的异常。我阅读了一些与C++11线程相关的问题,我意识到,我还需要使用-pthread标志来正确编译代码。使用-pthread工作正常,我能够运行线程代码。我的问题是,C++11多线程模型是否在后台使用Pthreads?还是从头开始写的?我不知道是否有任何成员是gcc贡献者,但我只是好奇。 最佳答案 如果你运行g++-v,它会给你一堆关于它是如何配置的信息。其中之一通常是一条看起来像的线Th

c++ - pthread_once() 中的竞争条件?

我在一个线程中有一个std::future正在等待另一个线程中设置的std::promise。编辑:用一个将永远阻塞的示例应用更新了问题:更新:如果我改用pthread_barrier,下面的代码会not阻塞。我创建了一个测试应用程序来说明这一点:基本上类foo创建一个thread在其运行函数中设置一个promise,并在构造函数中等待该promise被设置。一旦设置,它会增加一个atomic计数然后我创建一堆这些foo对象,将它们拆掉,然后检查我的count。#include#include#include#include#include#includestructfoo{foo(s

c++ - 线程安全的惰性初始化:静态vs std::call_once vs双重检查锁定

对于线程安全的惰性初始化,应该在函数std::call_once还是显式的双重检查锁定中首选静态变量?有什么有意义的区别吗?这三个问题都可以看到。Double-CheckedLockSingletoninC++11在Google中出现了两种版本的C++11中的双重检查锁定。AnthonyWilliamsshows都使用显式的内存顺序和std::call_once仔细检查了锁定。他没有提到static,但是该文章可能是在C++11编译器可用之前写的。JeffPreshing在广泛的writeup中描述了双重检查锁定的几种变体。他的确提到使用静态变量作为选项,甚至展示了编译器将生成用于双重

c++ - 为什么 pthread_exit 会抛出被省略号捕获的东西?

如果pthread_create调用的函数有如下结构try{...code....pthread_detach(pthread_self());pthread_exit(NULL);}catch(...){std::cout为什么在执行pthread_exit时会调用省略号的异常处理程序?(请注意,例如,std::exception不会被抛出) 最佳答案 至少在GCC中pthread_exit可能会抛出___forced_unwind异常,用于在线程退出期间展开堆栈。它不是从std::exception继承的,因此不能作为一个来捕获

c++ - PThread 是多平台/C++ 多线程程序的好选择吗?

过去5年主要从事Java和.NET的开发,在此期间没有编写任何重要的C或C++。所以已经离开那个场景一段时间了。如果我现在想编写一个C或C++程序,它执行一些多线程并且源代码可跨Windows、MacOSX和Linux/Unix移植-PThread是一个不错的选择吗?C或C++代码不会执行任何GUI,因此无需担心任何这些。对于Windows平台,我不想带来太多Unix包袱,但就unix仿真运行时库而言。更喜欢适用于Windows的PThreadAPI,它是现有Windows线程API的尽可能精简的包装器。附录编辑:Amleaningtowardgoingwithboost:thread

c++ - #pragma once 进入头守卫的原因是什么?

刚刚在里面看到了这个#ifndefBOOST_ASIO_HPP#defineBOOST_ASIO_HPP#ifdefined(_MSC_VER)&&(_MSC_VER>=1200)#pragmaonce#endif//defined(_MSC_VER)&&(_MSC_VER>=1200)///....#endif//BOOST_ASIO_HPP忽略_MSC_VER预处理器检查,拥有#pragmaonce有什么好处?在这种情况下?预处理器header保护是否确保在所有情况下和所有平台上,header内容仅是included一次? 最佳答案

c++ - CLOCK_MONOTONIC 和 pthread_mutex_timedlock/pthread_cond_timedwait

pthread_mutex_timedlockdocumentation说abs_timeout需要一个CLOCK_REALTIME。但是,我们都知道对特定持续时间进行计时是不合适的(由于系统时间调整)。有没有办法让可移植的CLOCK_MONOTONIC上的pthread锁定超时?pthread_cond_timedwait也是如此。 最佳答案 查看了文档和pthread.h,我找不到制作pthread_mutex_timedlock的方法使用CLOCK_MONOTONIC所以我认为这是不可能的(目前)。对于pthread_cond

c++ - move lambda : once you've move-captured a move-only type, 如何使用 lambda?

这个问题在这里已经有了答案:Howtocreateanstd::functionfromamove-capturinglambdaexpression?(3个回答)关闭7年前。Thisanswer解释了如何在C++14中move捕获lambda中的变量。但是,一旦您在lambda中move捕获了一个不可复制的对象(例如std::unique_ptr),您就无法复制lambda本身。如果您可以movelambda,这会很好,但尝试这样做时会出现编译错误:usingnamespacestd;classHasCallback{public:voidsetCallback(std::funct

c++ - Android NDK 中的 pthread_cancel() 替代方案?

我正在将中型C++代码体移植到AndroidNDK。不幸的是,pthreads实现(无论如何,从NDKv5开始)是不完整的。具体来说,我们的应用程序依赖pthread_cancel()来终止工作线程。NDK没有实现pthread_cancel()!当工作线程正常响应时,还有其他明显的答案。但是在工作线程没有响应的情况下(例如无限循环),我怎样才能在不杀死整个进程的情况下取消它? 最佳答案 适用于此人的可能选项:http://igourd.blogspot.com/2009/05/work-around-on-pthreadcance

c++ - 使用 pthread_create 时出现 valgrind 内存泄漏错误

我正在使用pthread库编写程序。当我使用命令valgrind--leak-check=full运行程序时,我收到以下错误描述:==11784====11784==**HEAPSUMMARY:**==11784==inuseatexit:4,952bytesin18blocks==11784==totalheapusage:1,059allocs,1,041frees,51,864bytesallocated==11784====11784==**288bytes**in1blocksarepossiblylostinlossrecord2of3==11784==at0x4C2380