linux 執行緒同步問題

2021-07-28 09:27:58 字數 2071 閱讀 6969

#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...