gpt4 book ai didi

c++ - 混合 pthread.h 和 C++11 标准库线程功能是否安全?

转载 作者:IT老高 更新时间:2023-10-28 21:47:48 24 4
gpt4 key购买 nike

我可以使用 pthread_create 生成一个线程并在其中安全地使用 std::mutex 吗?

我认为如果 std::mutex 被实现为 pthread_mutex_t 那就没问题了,但我没有在任何地方看到这一点

例如:

#include <pthread.h>
#include <mutex>

namespace {
std::mutex global_lock;
}

void* thread_func(void* vp) {
// std::mutex used in thread spawned with pthread_create
std::lock_guard<std::mutex> guard(global_lock);
// critical section
return nullptr;
}

int main() {
pthread_t tid;
pthread_create(&tid, nullptr, thread_func, nullptr);
pthread_join(tid, NULL);
}

顺便说一句,我正在运行 Debian Wheezy。

最佳答案

你可以在我的机器上(Debian 也是)。但我不确定我是否会称之为保险箱。

如果您查看相关文件,/usr/include/c++/4.7/i486-linux-gnu/bits/gthr-default.h在我的例子中,你会看到 pthreads api 会有 1:1 的映射。 <mutex>使用 __gthread_mutex_lock用于在 pthread_mutex_lock 中精确定义的锁定.或者你会看到 std::thread声明 typedef __gthread_t native_handle_type;

我不知道是否有记录的方法来检查是否使用了 pthread。但是gthr-default.h定义 _GLIBCXX_GCC_GTHR_POSIX_H作为包括守卫,我认为只要定义了这个宏,您就可以假设您可以将它们混合使用。

编辑:鉴于@Wakely 的提示,我会写:

template <typename T>
using strip = typename std::remove_pointer<typename std::decay<T>::type>::type;

static_assert(std::is_same<strip<std::thread::native_handle_type>, pthread_t>::value,
"libstdc++ doesn't use pthread_t");

关于c++ - 混合 pthread.h 和 C++11 标准库线程功能是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15367988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com