多執行緒程式設計2

2021-09-19 14:03:50 字數 1752 閱讀 7040

//訊號量同步

#include

#include

#include

#include

#include//訊號量函式定義

#include

void *thread_fun(void *arg);

sem_t bin_sem;

#define worksize 1024

char workarea[worksize];

int main()

res=pthread_create(&thread,null,thread_fun,null);

if(res!=0)

printf(「input some text.enter 'end』to finish\n」);

while(strncmp(「end」,workarea,3)!=0)

printf("\nwaiting for thread to finish\n");

res=pthread_join(thread,&thread_result);

if(res!=0)

printf(「thread joined\n」);

sem_destroy(&bin_sem); //銷毀訊號量

return 0;

}void *thread_fun(void * arg)

pthread_exit(null);

}初始化訊號量時,設定為0——執行緒函式在啟動時,sem_wait()呼叫就會阻塞,並且等待訊號量變成非零值。

//互斥量實現程序同步

#include

#include

#include

#include

#include

void* thread_fun(void*arg);

pthread_mutex_t work_mutex;

#define worksize 1024

char workarea[worksize];

int time_to_exit;

int main()

res=pthread_create(&thread,null,thread_fun,null);

if(res!=0)

pthread_mutex_lock(&work_mutex);

printf(「input some text 'end』to finish\n」);

while(!time_to_exit)

else}}

pthread_mutex_unlock(&work_mutex);

printf("\nwaiting for thread to finish\n");

res=pthread_join(thread,&thread_result);

if(res!=0)

printf(「thread joined\n」);

pthread_mutex_destroy(&work_mutex);

return 0;

}voidthread_fun(void*arg)

}time_to_exit=1;

workarea[0]=』\0』;

pthread_mutex_unlock(&work_mutex);

pthread_exit(null);

}使用互斥量實現多執行緒的同步訪問——允許程式設計師鎖住某個物件,使其每次只被乙個執行緒訪問。

為了控制對關鍵**的訪問,必須在進入這段**之前鎖住乙個互斥量,然後在完成操作後解鎖它。

多執行緒程式設計2

include include using namespace std 定義函式,可呼叫的物件。作為執行緒引數的入口 void myprint const int i,char pmybuf int main include include using namespace std void mypr...

多執行緒程式設計2 執行緒同步

訊號量 訊號量通常有兩種 二進位制訊號量和計數訊號量。二進位制訊號量只有0和1兩種取值,計數訊號量有更大的取值範圍。訊號量一般用來保護一段 使其每次只能被乙個執行執行緒執行,要完成這個工作,可以使用二進位制訊號量。有時,希望可以允許有限數目的執行緒執行一段指定的 這時可以使用計數訊號量。建立 inc...

多執行緒程式設計雜說2

多執行緒程式設計普及出現在90年以後,之前只有多核的cpu伺服器才有這樣的需要。多執行緒以其複雜化脆弱性著稱,程式設計師大多避而不談或只是簡單的應用。執行緒保護的互斥鎖被認為是導致延遲和效能下降的主因。這主要有兩方面的原因,第一大部分應用只需要乙個執行緒進行處理有著強烈的排他性和連貫性,第二很少有使...