兩個執行緒輪流對乙個全域性變數執行加1操作並且列印

2021-08-19 14:13:43 字數 754 閱讀 4728

最近在看多執行緒程式設計,想起以前有個**面試出的題目,今天就寫了下,主要是利用互斥變數和條件變數,主線程先執行,然後通知子執行緒執行,輪流執行++操作,並且列印,**如下:

#include 

#include

#include

using

namespace

std;

int num = 0;

pthread_mutex_t mtx;

pthread_cond_t cond;

unsigned

char flag = 3; //00000011

static

void* threadfunc(void *arg)

return null;

}int main()

++num;

flag &= 0x0;

flag |= 0x1;

printf("main:%u ,i=%d\n",pthread_self(),num);

pthread_cond_signal(&cond);

pthread_mutex_unlock(&mtx);

}pthread_join(t, null);

pthread_mutex_destroy(&mtx);

pthread_cond_destroy(&cond);

return

0;}

其實也可以不用條件變數,利用那個標誌也能達到同樣的效果

使用乙個全域性變數

然而,有區域性變數同名的全域性變數通常是製造麻煩,並應盡可能避免。使用匈牙利表示法,它是常見的全域性變數 g 字首。這是區分全域性變數與區域性變數的一種簡單的方式,避免了由於被隱藏變數命名衝突。新的程式設計師經常使用全域性變數很多,因為他們是容易的工作,特別是當涉及到許多功能。然而,這是乙個非常糟糕...

C 兩個cpp呼叫靜態全域性變數與全域性變數問題

前提概要 兩個cpp檔案想操作同乙個map物件,第乙個cpp中做插入處理,第二個cpp中做查詢處理。使用全域性變數可以實現,這裡記錄一下使用靜態全域性變數時,為什麼會出錯的問題。aaa.h include include include using namespace std void f bbb ...

python高階之多執行緒對同乙個全域性變數的處理方法

通常情況下 from threading import thread global num 0 def func1 global global num for i in range 1000000 global num 1 print func1 global num s global num de...