C++ 而对所有线程均为true #包括 #包括 #定义第5行 pthread_mutex_t lock; 无效*开始(无效*参数){ pthread_mutex_lock(&lock); while(true) { //做某些事情,互斥以避免关键部分问题 int*number=(int*)参数; cout

C++ 而对所有线程均为true #包括 #包括 #定义第5行 pthread_mutex_t lock; 无效*开始(无效*参数){ pthread_mutex_lock(&lock); while(true) { //做某些事情,互斥以避免关键部分问题 int*number=(int*)参数; cout,c++,multithreading,C++,Multithreading,如果互斥锁如您所示在循环之外,那么只有一个线程可以进入该循环。如果该循环永远运行(如而(true)如果内部没有break语句就可以了),那么实际上只有一个线程将进入该循环,其余线程将被锁定 在需要保护的代码周围移动互斥体。如果希望所有线程并行循环,轮流访问公共结构,请在循环中移动互斥体。在这种情况下,只有一个线程在循环中,而且这将是第一个进入的线程,因为这将永远不会解锁互斥体,没有其他线程可以我将进入ie,所有其他线程将无限期等待。我想您想要的是: #include<stdio.h>

如果互斥锁如您所示在循环之外,那么只有一个线程可以进入该循环。如果该循环永远运行(如
而(true)
如果内部没有
break
语句就可以了),那么实际上只有一个线程将进入该循环,其余线程将被锁定


在需要保护的代码周围移动互斥体。如果希望所有线程并行循环,轮流访问公共结构,请在循环中移动互斥体。

在这种情况下,只有一个线程在循环中,而且这将是第一个进入的线程,因为这将永远不会解锁互斥体,没有其他线程可以我将进入ie,所有其他线程将无限期等待。我想您想要的是:

#include<stdio.h>
#include<pthread.h>
#define nThreads 5

pthread_mutex_t lock;
void *start(void *param) {
pthread_mutex_lock(&lock); 
while (true)
{

   //do certain things , mutex to avoid critical section problem
   int * number = (int *) param;
    cout<<*number;
}
pthread_mutex_unlock(&lock);

}
int main() 
{
    pthread_mutex_init(&lock, NULL);
    pthread_t tid[nThreads];
    int i = 0;
    for(i = 0; i < nThreads; i++) pthread_create(&tid[i], NULL, start, (void *) &i);
    for(i = 0; i < nThreads; i++) pthread_join(tid[i], NULL);
    pthread_mutex_destroy(&lock);
    return 0;
}
while(true)
{
pthread_mutex_lock(&lock);
//做某些事情,互斥以避免关键部分问题
int*number=(int*)参数;

第一个获得互斥锁的coutOne线程将循环。其他线程将阻止等待互斥锁。如果没有更具体的要求,其余问题将无法回答。这可能有助于理解互斥锁是互斥的缩写,这意味着在任何给定时间最多一个线程可以拥有互斥锁。while(true){pthread_mutex_lock(&lock);//执行某些操作,互斥以避免关键部分问题int*number=(int*)param;cout线程将轮流执行(可能有些随机)。在循环的每次迭代中,所有线程都将尝试获取锁,但一次只有一个线程成功。当该线程释放锁时,某些线程(同一线程或另一线程)如果我理解正确,每个线程都会打印自己的编号,你可以得到000000000001223333344222。
while (true)
{
pthread_mutex_lock(&lock); 
   //do certain things , mutex to avoid critical section problem
   int * number = (int *) param;
    cout<<*number;
pthread_mutex_unlock(&lock);
}