133得票4回答
什么是可重入锁及其概念?

我经常感到困惑。有人能解释一下在不同上下文中Reentrant的含义吗?为什么要使用可重入和非可重入? 例如pthread(posix)锁原语,它们是可重入的还是不可重入的?在使用它们时应避免哪些陷阱? 互斥锁是可重入的吗?

131得票9回答
pthread_create()函数被调用时传递多个参数?

我需要将多个参数传递给一个我想在单独线程上调用的函数。我已经阅读了典型的做法是定义一个结构体,将结构体的指针传递给函数,并对参数进行解引用。然而,我无法让这个方法起作用: #include <stdio.h> #include <pthread.h> struct ...

126得票12回答
如何在Linux C程序中获取pthread的线程ID?

在Linux C程序中,如何打印由pthread库创建的线程的线程ID?例如,就像我们可以通过getpid()获得进程的PID一样。

121得票7回答
基本互斥锁和原子整数哪个更有效?

对于像计数器这样简单的东西,如果有多个线程会增加数量。我读到互斥锁可能会降低效率,因为线程必须等待。所以,对我来说,原子计数器将是最有效的,但我读到内部基本上是一个锁?所以我猜我困惑了,任何一种方法如何比另一种更有效。

106得票4回答
PTHREAD_MUTEX_INITIALIZER与pthread_mutex_init(&mutex, param)的区别

是否有任何区别pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 或者pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); 如果我只使用第一种方法,我是否足够安全?注意:我的问题...

96得票9回答
从一个类中使用pthread函数

假设我有一个类,比如:class c { // ... void *print(void *){ cout << "Hello"; } } 然后我有一个c的向量vector<c> classes; pthread_t t1; cla...

95得票3回答
在未锁定互斥量的情况下调用pthread_cond_signal

我在某处读到,我们应该在调用pthread_cond_signal之前锁定mutex,并在调用后解锁mutex: pthread_cond_signal()例程用于向等待condition变量的另一个线程发出信号(或唤醒)。它应该在锁定mutex之后调用,并且必须在pthread_cond_...

90得票4回答
确定正在持有互斥锁的线程是否可能?

首先,我使用pthread库编写多线程C程序。线程总是在等待其互斥锁时挂起。当我使用strace工具查找处于FUTEX_WAIT状态的线程时,我想知道此时哪个线程持有该互斥锁。但我不知道怎么做。是否有任何工具可以实现这一点? 有人告诉我Java虚拟机支持此功能,所以我想知道Linux是否支持此功能。

86得票9回答
C++中高效的线程安全单例模式

单例模式的通常模式是这样的:static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) inst = new Foo(...); return *inst; } 然而,据我所知,该解决方...

85得票4回答
POSIX线程和信号

我一直在尝试理解 POSIX 线程和 POSIX 信号交互的复杂性。特别是,我感兴趣的问题有: 控制信号传递到哪个线程是最好的方式(假设它在第一时间不是致命的)? 告诉另一个可能很忙的线程信号已经到达,什么是最好的方式?(我已经知道从信号处理程序中使用 pthread 条件变量是一个坏主意...