47得票5回答
pthread_create和将整数作为最后一个参数传递

我有以下的函数:void *foo(void *i) { int a = (int) i; } int main() { pthread_t thread; int i; pthread_create(&thread, 0, foo, (void *)...

47得票3回答
使用条件变量相比互斥锁的优势

我想知道在pthread中使用条件变量相比互斥锁的性能优势是什么。 我发现:“如果没有条件变量,程序员需要不断地轮询(可能在关键区域内),以检查是否满足条件。这可能非常耗费资源,因为线程将持续忙于此活动。条件变量是一种实现同样目标而不需要轮询的方法。” (来源:https://computi...

47得票5回答
在Pthread库中终止线程

我使用 pthread_create(&thread1, &attrs, //... , //...);,如果出现某些情况需要终止这个线程,如何终止?

46得票6回答
如何使用C++11 std::thread设置堆栈大小

我一直在尝试熟悉C++11中的std::thread库,但是遇到了一个难题。 起初我接触的是posix线程,想知道怎样在构造之前设置std::thread的堆栈大小,因为我似乎找不到任何关于此任务的参考资料。 使用pthread时,设置堆栈大小如下:void* foo(void* arg)...

45得票6回答
并行化:使用pthreads还是OpenMP?

在科学计算中,大多数人在共享内存并行化方面使用OpenMP作为准标准。 除了可读性之外,是否有任何理由选择OpenMP而不是pthreads?后者似乎更基础,我怀疑它可能更快且更容易优化。

43得票3回答
pthread_join()和pthread_exit()

我有一个关于C并发编程的问题。在pthread库中,pthread_join的原型是:int pthread_join(pthread_t tid, void **ret); pthread_exit 的原型是:void pthread_exit(void *ret); 我有点困惑,为什么pt...

42得票4回答
什么情况下使用 pthread_spin_lock(而不是 pthread mutex)是正确的选择?

鉴于pthread_spin_lock可用,何时应使用它,何时不应使用它? 也就是说,如何决定使用pthread mutex还是pthread spinlock来保护共享数据结构?

41得票2回答
如何将gdb调试限制为一次只能调试一个线程

我想通过控制线程执行顺序来调试一个多线程程序,我正在使用C++和gdb。除了主线程外,我还有两个线程(用于示例程序),我想在保持另一个线程停止的同时调试一个线程。这是我编写的示例程序:#include <iostream> #include <pthread.h> #i...

41得票3回答
当在GDB中调试多线程程序时,如何一次只继续一个线程?

我有一个使用两个线程的程序。我已在这两个线程中设置了断点。在使用gdb运行程序时,我想在这两个线程之间切换并使它们运行。 (当在断点上暂停时,线程t1正在活动和运行,线程t2没有运行。我想停止t1的运行并运行t2)。 是否有一种方法可以在gdb中安排线程?

40得票3回答
我需要使用-D_REENTRANT和-pthreads吗?

在Linux(内核2.6.5)中,我们的构建系统使用-D_REENTRANT调用gcc。 在使用pthreads时,这仍然需要吗? 它与gcc -pthread选项有什么关系?我知道在pthreads中应该使用-pthread,但我还需要-D_REENTRANT吗? 另外,您是否了解在使用gc...