#include
#include
#include
#include
#include
#define max 10
pthread_mutex_t mutex = pthread_mutex_initializer;
pthread_cond_t cond = pthread_cond_initializer;
int i = 1;
void* thread1(void* arg)
pthread_mutex_unlock(&mutex);
// printf("----1----\n");
sleep(1);
}return arg;
}void* thread2(void* arg)
pthread_mutex_unlock(&mutex);
// printf("----2----\n");
sleep(1);
}return arg;
}int main()
執行截圖
三個互斥量,三個條件變數
設定乙個當前執行緒執行的id,
每次執行乙個執行緒,id需要變成下乙個執行緒id
不是 就需要條件等待
是 就列印自身資訊,並傳送條件訊號給下乙個執行緒(因為當前執行的執行緒id 是進行了+1操作的)
/**
* 參考如下
* * */
#include
#include
#include
#include
#include
const
int thread_number = 3;
// 子執行緒的互斥量和條件變數
pthread_mutex_t thread_mutex[thread_number];
pthread_cond_t thread_cond[thread_number];
// 子執行緒是否正在等待
bool thread_wait_flag[thread_number];
// 標識輪到哪個子執行緒輸出其id
pthread_mutex_t mutex;
int thread_turn;
void *thread_func(void *arg);
int main(int argc, char **argv)
pthread_mutex_init(&mutex, null);
thread_turn = 0;
for (i = 0; i < thread_number; ++i)
thread_wait_flag[i] = false;
for (i = 0; i < thread_number; ++i)
for (i = 0; i < thread_number; ++i)
for(i = 0; i < thread_number; ++i)
printf("\n");
return
0;
} void *thread_func(void *arg)
pthread_mutex_unlock(&thread_mutex[thread_turn]);
} if (count == 10) // 若是第1、2個子執行緒,發出訊號後,退出
break;
} else
// 否則,等待
linux執行緒同步問題
執行緒最大的特點就是資源的共享性,然而資源共享中的同步問題是多執行緒程式設計的難點。linux系統提供了多種方式來處理執行緒同步的問題,其中最常用的是互斥鎖,條件變數和非同步訊號。互斥鎖通過鎖機制來實現執行緒間同步。在linux下,執行緒的互斥量資料型別是pthread mutex t。在使用前 要...
linux 執行緒 執行緒同步
因為執行緒獨自擁有的只有棧,其他的區域執行緒共同擁有。並且對共享區域的操作並不都是原子的。對共享區域的操作順序又是不確定的。就像建立兩個檔案描述符同時指向 同一檔案,並且連續向檔案中寫入那麼寫的東西可能是亂七八糟的。這時就需要執行緒對共享區的同步。而另一種情況是,多個執行緒的指令執行順序需要同步。這...
執行緒同步問題
昨天簡單研究了一點執行緒的同步問題 package com.pb.thread public class waymakethread 建立乙個執行緒,繼承thread類 class mythread extends thread 建立乙個類,實現runable介面,這不是乙個執行緒類 class m...