執行緒同步方式

2021-08-19 15:25:18 字數 3336 閱讀 9327

1.原子訪問:同一時刻只允許同一執行緒訪問資源(變數)  關鍵字:

volatile(防止編譯優化,對特殊位址進行穩定訪問)

可直接操作記憶體

2.關鍵段:同一時刻只允許乙個執行緒訪問乙個**段

initializecriticalsectionandspincount(變數名,0)

例:

// global variable

critical_section criticalsection;

int main( void )

dword winapi threadproc( lpvoid lpparameter )

3.互斥量:mutex本質上說就是一把鎖,提供對資源的獨佔訪問,所以mutex主要的作用是用於

互斥createmutex(安全屬性,null,null(互斥量名字))

例:

#include #include #define threadcount 2

handle ghmutex;

dword winapi writetodatabase( lpvoid );

int main( void )

// create worker threads

for( i=0; i < threadcount; i++ )

}// wait for all threads to terminate

waitformultipleobjects(threadcount, athread, true, infinite);

// close thread and mutex handles

for( i=0; i < threadcount; i++ )

closehandle(athread[i]);

closehandle(ghmutex);

return 0;

}dword winapi writetodatabase( lpvoid lpparam )

__finally

} break;

// the thread got ownership of an abandoned mutex

// the database is in an indeterminate state

case wait_abandoned:

return false; }}

return true;

}

4.事件:事件是核心物件,事件分為

手動置位事件

和自動置位事件

。事件可以由

setevent()設定為有訊號

,由resetevent()

來設值為無訊號。

createevent(安全屬性(null),true,false,null(事件名稱))

#include #include #define threadcount 4 

handle ghwriteevent;

handle ghthreads[threadcount];

dword winapi threadproc(lpvoid);

void createeventsandthreads(void)

// create multiple threads to read from the buffer.

for(i = 0; i < threadcount; i++)

}}void writetobuffer(void)

}void closeevents()

int main( void )

// close the events to clean up

closeevents();

return 0;

}dword winapi threadproc(lpvoid lpparam)

// now that we are done reading the buffer, we could use another

// event to signal that this thread is no longer reading. this

// example simply uses the thread handle for synchronization (the

// handle is signaled when the thread terminates.)

printf("thread %d exiting\n", getcurrentthreadid());

return 1;

}

5.訊號量:訊號量(semaphore),有時被稱為

訊號燈,是在多執行緒環境下使用的一種設施, 它負責協調各個執行緒, 以保證它們能夠正確、合理的使用公共資源。

#include #include #define max_sem_count 10

#define threadcount 12

handle ghsemaphore;

dword winapi threadproc( lpvoid );

int main( void )

// create worker threads

for( i=0; i < threadcount; i++ )

}// wait for all threads to terminate

waitformultipleobjects(threadcount, athread, true, infinite);

// close thread and semaphore handles

for( i=0; i < threadcount; i++ )

closehandle(athread[i]);

closehandle(ghsemaphore);

return 0;

}dword winapi threadproc( lpvoid lpparam )

break;

// the semaphore was nonsignaled, so a time-out occurred.

case wait_timeout:

printf("thread %d: wait timed out\n", getcurrentthreadid());

break; }}

return true;

}

注:互斥量,事件,訊號量 都可以跨程序通訊

事件和訊號量可以一起做任務

這些例子都是在vs的幫助裡找到的~~~~

執行緒同步的方式

一 什麼是執行緒的同步 當多個執行緒同時訪問其共享的資源時,需要相互協調,以防止出現資料不一致 不完整的問題,能達到這種狀態執行緒同步 二 執行緒同步的方式 1 互斥量 互斥鎖 如果乙個執行緒要訪問一塊資料時,它就呼叫mutex lock,如果互斥量是處於解鎖狀態,也就是說這塊資料可用,那麼就呼叫成...

執行緒的同步方式

併發 同乙個時間段有多個程式在同乙個cpu上輪流執行 並行 同一時間多個程式在不同cpu上同時執行。併發是在時間段的表象,並行是在時刻的表象。同步 執行緒之間具有依賴關係,乙個執行緒的執行依賴於另乙個執行緒的訊息。互斥 對於程序的某一共享資源,同一時刻只允許乙個執行緒訪問。互斥是一種特殊的同步。實現...

執行緒同步的方式

同步 同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。這裡的同步千萬不要理解成那個同時進行,應是指協同 協助 互相配合。執行緒互斥 指對於共享的程序系統資源,在各單個執行緒訪問時的排它性。當有若干個執行緒都要使用某一共享資源時,任何時刻最多隻允許乙個執行緒去使用,其它要使用該資源的執...