Linux12執行緒同步,併發問題(未完)

2021-09-13 12:26:33 字數 3561 閱讀 4309

top(顯示一些資訊關於cpu的)?

設定cpu的效能,taskset,指定某個程序在某個核心上執行。

cpu親和性

使用多處理器資源,同時做兩件以上事情,時候用執行緒

執行緒間通訊問題(同步)四種方法:

使用者可以用:

訊號量;

互斥鎖條件變數

讀寫鎖核心空間的方法:自旋鎖

1.執行緒(程序內部的一條執行路徑或序列)(排程執行角度)程序:乙個正在執行的程式(分配資源角度)併發,同步,

執行緒函式

2.作業系統描述的實現:

3.編譯時要加執行緒的庫

(gcc -o main main.c -lpthread)

1 #include2 #include3 #include4 #include5 #include6 #include7 void * thread_fun(void *arg)

8 16 pthread_exit("fun over");

17 }

18 int main()

19 30 char *s=null;

31 pthread_join(id,(void**)&s);//等待子執行緒完成

32 printf("s==%s\n",s);

33 exit(0);//退出程序,執行緒中不呼叫

34 //pthread_exit(null)// 退出執行緒

35 }

結果

9 pthread_mutex_t mutex; //在主函式之前列印東西?查資料

10 void * thread_fun(void *arg)//執行緒

11 26 }

27 28 int main()

29 51 pthread_join(id,null);

52 //sem_destroy(&sem);

53 pthread_mutex_destroy(&mutex);

54 exit(0);

55 }

cond.c

#include2 #include3 #include4 #include5 #include6 #include7 

8 pthread_cond_t cond;

9 pthread_mutex_t mutex;

10 void *fun1(void *arg)

11 22 printf("fun1:%s\n",s);

23 }

24 printf("fun1 over!!\n");

25 }

26 void *fun2 (void *arg)

27 39 printf("fun2:%s\n",s);

40 }

41 printf("fun2 over!!\n");

42 }

43 44 int main()

45 ;

48 49 pthread_mutex_init(&mutex,null);

50 pthread_cond_init(&cond,null);

51 52 pthread_create(&id[0],null,fun1,(void*)buff);

53 pthread_create(&id[1],null,fun2,(void*)buff);

54 while(1)

55 ;

57 fgets(readline,128,stdin);

58 strcpy(buff,readline);//向buff寫入資料

59 60 if(strncmp(readline,"end",3)==0)

61

65 pthread_mutex_lock(&mutex);//喚醒時可以不加鎖

66 pthread_cond_signal(&cond);//喚醒在條件變數上等待的執行緒(某乙個)

67 pthread_mutex_unlock(&mutex);

68 }

69 pthread_mutex_lock(&mutex);

70 pthread_cond_broadcast(&cond);//喚醒所有的執行緒

71 pthread_mutex_unlock(&mutex);

72 73 pthread_join(id[0],null);

74 pthread_join(id[1],null);

75 76 pthread_mutex_destroy(&mutex);//銷毀鎖

77 pthread_cond_destroy(&cond);//銷毀條件變數

78 79 exit(0);

80 }

結果:

兩個執行緒交替列印,乙個使用時另外乙個不能使用。輸入end後兩個執行緒同時結束。

31 sem_init(&sem,0,1);//初始化訊號量值為1;

單核處理器列印出來為小於5000,原因是多個執行緒併發執行在乙個處理器上,

多核處理器為5000

多執行緒併發問題

執行緒安全是乙個非常燙手的山芋,因為即使合理運用了鎖,也不一定能保證執行緒安全,這是因為落後的編譯器無法滿足日益增長的併發需求,很多看似無錯的 在優化和併發面前產生了麻煩,可以看下面的 x 0 thread1 thread2 lock lock x x unlock unlock 上面的 看著是沒有...

多執行緒的併發問題?

1 描述 在乙個cpu上同時執行多個執行緒時,會存在多個執行緒競爭cpu資源的問題,但是有時候一段 是不允許打斷,或是出現死鎖的狀態。死鎖 多個執行緒出現了鎖巢狀,形成資源互相等待的狀態,使程式無法繼續執行。2 解決或避免死鎖狀態的方法 引入鎖物件 synchronized 同步 塊 在需要遵循原子...

執行緒併發問題和執行緒的休眠

1 併發安全性問題 網際網路的專案中存在這大量的併發案例,如賣火車票,電商 等 範例 火車票有100張票,4個視窗同時賣票 1 採用繼承thread來實現 package com.cn.tickets 賣票視窗 author administrator public class saleticket...