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