多執行緒學習之一 執行緒對共享全域性變數的訪問

2021-05-25 00:16:03 字數 2666 閱讀 4797

多個執行緒之間,可以訪問共享變數,但存在風險。因為各個執行緒的各語句執行順序可以是任意的,所以訪問共享全域性變數時需要互斥加鎖,才能保證結果可靠。

在vc中,執行緒操作的幾個介面函式:

執行緒相關:

建立執行緒:

createthread(...);

等待執行緒結束:

waitformultipleobjects(...);

獲取當前執行緒id:

getcurrentthreadid(void);         

mutex相關:

建立mutex:

createmutex(...);

等待請utex:

waitforsingleobject(handle,time);

釋放mutex: 

releasemutex(mutex);

程式1:不加互斥,全域性變數結果不確定;

程式2:加了互斥,全域性變數結果確定。

附:程式1:

#include

#include

#include

#include

#define max_num  100

int count =0;

unsigned long thread_func(void* parg);

int main()

;unsigned long selftid = 0;

handle handle[2] = ;

selftid = getcurrentthreadid();

printf("enter main tid: %u/r/n",selftid);

count = 0;

handle[0] = createthread(null,2048,(lpthread_start_routine)thread_func,null,null,&tid[0]);

handle[1] = createthread(null,2048,(lpthread_start_routine)thread_func,null,null,&tid[1]);

waitformultipleobjects(2,handle,true,0xffffffff);

if(count == 2 * max_num)

else

printf("tid[0]: %u,tid[1]:%u/r/n",tid[0],tid[1]);

printf("return from main tid: %u/r/n",selftid);

closehandle(handle[0]);

closehandle(handle[1]);

return 0;

}unsigned long thread_func(void* parg)

;unsigned long selftid = 0;

handle handle[2] = ;

//hmutex = openmutex(null,false,"mutext02");

if(null == hmutex)

selftid = getcurrentthreadid();

printf("enter main tid: %u,mutex;%u/r/n",selftid,hmutex);

count = 0;

handle[0] = createthread(null,2048,(lpthread_start_routine)thread_func,null,null,&tid[0]);

handle[1] = createthread(null,2048,(lpthread_start_routine)thread_func,null,null,&tid[1]);

waitformultipleobjects(2,handle,true,infinite);

if(count == 2 * max_num)

else

printf("tid[0]: %u,tid[1]:%u/r/n",tid[0],tid[1]);

printf("return from main tid: %u/r/n",selftid);

closehandle(handle[0]);

closehandle(handle[1]);

closehandle(hmutex);

return 0;

}unsigned long thread_func(void* parg)

{int i=0;

unsigned long tid =0;

int itmp =0;

tid =getcurrentthreadid();

printf("enter tid: %u,mutex;%u/r/n",tid,hmutex);

for(i=0; i執行結果:

enter main tid: 2704,mutex;2032

enter tid: 1580,mutex;2032

enter tid: 3392,mutex;2032

return from tid: 1580

return from tid: 3392

ok,count is: 200

tid[0]: 1580,tid[1]:3392

return from main tid: 2704

press any key to continue

POSIX多執行緒程式設計學習篇之一(執行緒管理)

首先來乙份最簡單的開胃篇 來認識多執行緒 include includevoid thread routine void arg 子執行緒執行的函式 void main int argc,char argv 一,pthread api 命名約定如下 二,執行緒的建立 退出等函式介紹 pthread ...

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...

Python多執行緒學習 一 執行緒的使用

一 python中的執行緒使用 python中使用執行緒有兩種方式 函式或者用類來包裝執行緒物件。1 函式式 呼叫thread模組中的start new thread 函式來產生新執行緒。如下例 python view plain copy import time import thread def...