使用執行緒同步列印數字的順序
在這裡,我們將看到如何使用不同的執行緒以正確的順序列印數字。在這裡,我們將建立n個線程,然後對它們進行同步。想法是,第一個執行緒將列印1,然後第二個執行緒將列印2,依此類推。當一個執行緒嘗試列印時,它將鎖定資源,因此其他執行緒無法使用該部分。
範例
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t* cond = NULL; int threads; volatile int count = 0; void* sync_thread(void* num) { //this function is used to synchronize the threads int thread_number = *(int*)num; while (1) { pthread_mutex_lock(&mutex); //lock the section if (thread_number != count) { //if the thread number is not same as count, put all thread except one into waiting state pthread_cond_wait(&cond[thread_number], &mutex); } printf("%d ", thread_number + 1); //print the thread number count = (count+1)%(threads); // notify the next thread pthread_cond_signal(&cond[count]); pthread_mutex_unlock(&mutex); } return NULL; } int main() { pthread_t* thread_id; volatile int i; int* thread_arr; printf("</p><p>Enter number of threads: "); scanf("%d", &threads); // allocate memory to cond (conditional variable) thread id's and array of size threads cond = (pthread_cond_t*)malloc(sizeof(pthread_cond_t) * threads); thread_id = (pthread_t*)malloc(sizeof(pthread_t) * threads); thread_arr = (int*)malloc(sizeof(int) * threads); for (i = 0; i < threads; i++) { //create threads thread_arr[i] = i; pthread_create(&thread_id[i], NULL, sync_thread, (void*)&thread_arr[i]); } // waiting for thread for (i = 0; i < threads; i++) { pthread_join(thread_id[i], NULL); } return 0; }
輸出
$ g++ test.cpp -lpthread $ ./a.out Enter number of threads: 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 ... ... ...
以上是使用執行緒同步列印數字的順序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

一般來說,我們只需要同時使用耳機或音響的其中一個設備,但是有些朋友反映在win11系統中,遇到了耳機和音響一起響的問題,其實我們可以在realtek面板中將它關閉,就可以了,下面一起來看一下吧。 win11耳機和音響一起響怎麼辦1、先在桌面上找到並打開“控制面板”2、進入控制面板,在其中找到並打開“硬體和聲音”3、然後再找到一個喇叭圖標的“Realtek高清晰音訊管理器”4、選擇“揚聲器”再點擊“後面板”進入揚聲器設定。 5.打開之後我們可以看到設備類型,如果要關閉耳機就取消勾選“耳機”,如果要

當您在您的同步資料夾中發現一個或多個項目與Outlook中的錯誤訊息不符時,這可能是因為您更新或取消了會議項目。在這種情況下,您會看到一條錯誤訊息,提示您的本機資料版本與遠端副本有衝突。這種情況通常發生在Outlook桌面應用程式中。您同步的資料夾中的一個或多個項目不符。若要解決衝突,請開啟這些項目,然後重試此操作。修復同步的資料夾中的一個或多個項目不符合Outlook錯誤在Outlook桌面版中,當本機行事曆項目與伺服器副本發生衝突時,可能會遇到問題。不過,幸運的是,有一些簡單的方法可以幫助您

MySQL是一個非常受歡迎的開源關聯式資料庫管理系統,廣泛應用於各種Web應用、企業系統等。在現代業務的應用場景下,大多數的MySQL資料庫需要部署在多台伺服器上,以提供更高的可用性和效能,這就需要進行MySQL資料的遷移和同步。本文將介紹如何實作多台伺服器之間的MySQL資料遷移和同步。一.MySQL資料遷移MySQL資料遷移指的是將MySQL伺服器中的數

win10剪貼簿有個非常好用的功能就是跨裝置雲端儲存功能,非常的好用可以幫助用戶PC設備和手機設備同步複製貼上。設定的方法非常簡單,只要在系統裡的剪切板設置就好。 win10剪貼簿同步到手機1、先點選左下角的開始,進入設定。 2、然後去點選「系統」。 3.選擇左側的「剪貼簿」。 4.最後在右邊的「跨裝置同步」點選登錄,然後選擇手機就好了。

為避免執行緒飢餓,可以使用公平鎖確保資源公平分配,或設定執行緒優先權。為解決優先權反轉,可使用優先權繼承,即暫時提高持有資源執行緒的優先權;或使用鎖的提升,即提升需要資源執行緒的優先權。

C++中執行緒終止和取消機制包括:執行緒終止:std::thread::join()阻塞目前執行緒直到目標執行緒完成執行;std::thread::detach()從執行緒管理中分離目標執行緒。執行緒取消:std::thread::request_termination()請求目標執行緒終止執行;std::thread::get_id()取得目標執行緒ID,可與std::terminate()一起使用,立即終止目標執行緒。實戰中,request_termination()允許執行緒決定終止時機,join()確保在主線

並發程式設計中的鎖定與同步在並發程式設計中,多個行程或執行緒同時執行,這可能會導致資源爭用和不一致性問題。為了解決這些問題,需要使用鎖定和同步機制來協調對共享資源的存取。鎖的概念鎖是一種機制,它允許一次只有一個執行緒或程序存取共享資源。當一個執行緒或程序獲得鎖時,其他執行緒或程序將被阻止存取該資源,直到鎖被釋放。鎖的類型python中有幾種類型的鎖:互斥鎖(Mutex):確保一次只有一個執行緒或程序可以存取資源。條件變數:允許執行緒或行程等待某個條件,然後取得鎖定。讀寫鎖:允許多個執行緒同時讀取資源,但只允許一個執行緒寫入資

Microsoft顯然不會將其強大的人工智慧支援的Copilot工具保留為新應用程式的獨家功能。現在,該公司剛剛宣布計劃在Windows上的Outlook經典應用程式中引入Copilot。正如其365路線圖網站上發布的那樣,預覽將於明年<>月開始,直到<>月在當前頻道的桌面上在全球範圍內推出。 Copilot是一種生產力工具,它使用大型語言模型(LLM)來幫助使用者完成編寫電子郵件、匯總文件和翻譯語言等任務。它的主要功能之一是它能夠總結電子郵件
