多執行緒程式設計——互斥量
阿新 • • 發佈:2018-12-29
#include <pthread.h> #include <unistd.h> #include <stdio.h> /* 執行緒控制塊 */ static pthread_t tid1; static pthread_t tid2; /* 函式返回值檢查 */ static void check_result(char* str,int result) { if (0 == result) { printf("%s successfully!\n",str); } else { printf("%s failed! error code is %d\n",str,result); } } /* 互斥鎖控制塊 */ static pthread_mutex_t mutex; /* 執行緒共享的列印函式 */ static void printer(char* str) { while(*str != 0) { putchar(*str); /* 輸出一個字元 */ str++; sleep(1); /* 休眠1秒 */ } printf("\n"); } /*執行緒入口*/ static void* thread1_entry(void* parameter) { char* str = "thread1 hello RT-Thread"; while (1) { pthread_mutex_lock(&mutex); /* 互斥鎖上鎖 */ printer(str); /* 訪問共享列印函式 */ pthread_mutex_unlock(&mutex); /* 訪問完成後解鎖 */ sleep(2); /* 休眠2秒 */ //printf("sleep 2s"); } } static void* thread2_entry(void* parameter) { char* str = "thread2 hi world"; while (1) { pthread_mutex_lock(&mutex); /* 互斥鎖上鎖 */ printer(str); /* 訪問共享列印函式 */ pthread_mutex_unlock(&mutex); /* 訪問完成後解鎖 */ sleep(2); /* 休眠2秒 */ } } /* 使用者應用入口 */ int application_init() { int result; /* 初始化一個互斥鎖 */ pthread_mutex_init(&mutex,NULL); /*建立執行緒1,執行緒入口是thread1_entry, 屬性引數為NULL選擇預設值,入口引數是NULL*/ result = pthread_create(&tid1,NULL,thread1_entry,NULL); check_result("thread1 created",result); /*建立執行緒2,執行緒入口是thread2_entry, 屬性引數為NULL選擇預設值,入口引數是NULL*/ result = pthread_create(&tid2,NULL,thread2_entry,NULL); check_result("thread2 created",result); return 0; } int main() { int i ; application_init(); i=100; do{ sleep(1); }while(i--); }
執行結果:
thread1 hello RT-Thread-bash-3.2$ gcc -pthread mutex.c -o app
-bash-3.2$ ./app
thread1 created successfully!
thread2 created successfully!
thread1 hello RT-Thread
thread2 hi world