實現如下:
.執行緒同步之互斥量加鎖解鎖和互斥鎖限制共享資源的訪問
案例:
#include
#include
int g_data=0;
pthread_mutex_t mutex;
void
*func1
(void
*arg)}}
void
*func2
(void
*arg)
}int
main()
ret2=
pthread_create
(&t2,
null
,func2,
(void*)
¶m);if
(ret ==0)
while(1
)pthread_join
(t1,
null);
pthread_join
(t2,
null);
pthread_mutex_destroy
(&mutex)
;return0;
}
clc@embed_learn:
~/lianxi4$ vi demo15.c
clc@embed_learn:
~/lianxi4$ .
/a.out
main:creat t1 success
main:creat t2 success
main:
0t1:
140103516976896 thread is creat
t1:parm is 100
t1:0
t2:140103508584192 thread is creat
t2:parm is 100
t2:1
t1:1
main:
2t1:
2main:3==
====
====
====
====
====
====
====
====
====
====
====
main:
3t2:
4main:
4t2:
5main:
5
保證g_data=3時,執行緒t1退出
死鎖:執行緒條件控制實現執行緒的同步
#include
#include
#include
int g_data=0;
pthread_mutex_t mutex;
pthread_cond_t cond;
void
*func1
(void
*arg)}}
void
*func2
(void
*arg)
pthread_mutex_unlock
(&mutex)
;sleep(1
);}}
intmain()
ret2=
pthread_create
(&t2,
null
,func2,
(void*)
¶m);// if(ret == 0)
pthread_join
(t1,
null);
pthread_join
(t2,
null);
pthread_mutex_destroy
(&mutex)
;pthread_cond_destroy
(&cond)
;return0;
}
執行結果:
clc@embed_learn:
~/lianxi4$ .
/demo16
t1:139871513495296 thread is creat
t1:parm is 100
t2:139871505102592 thread is creat
t2:parm is 100
t2:0
t2:1
t2:2
t1:run==
====
====
====
==t1:
3t2:
0t2:
1t2:
2t1:run==
====
====
====
==t1:
3
測試檔案test.c
int
main
(int argc,
char
**ar**)
}~
執行命令:
clc@embed_learn:
~/lianxi4$ .
/a.out 10
>>test.ret.txt &[3
]4230
結束之後可以開啟檢視執行除錯結果:
clc@embed_learn:
~/lianxi4$ vi test.ret.txt
linux系統程式設計 執行緒
include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg include include include include include include...
《Linux系統程式設計 執行緒池》
在傳統伺服器結構中,常是有乙個總的監聽執行緒監聽有沒有新的使用者連線伺服器,每當有乙個新的使用者進入,伺服器就開啟乙個新的執行緒使用者處理這 個使用者的資料報。這個執行緒只服務於這個使用者,當使用者與伺服器端關閉連線以後,伺服器端銷毀這個執行緒。然而頻繁地開闢與銷毀執行緒極大地占用了系統的資源,而且...
Linux系統程式設計 執行緒基礎
執行緒的概念 執行緒是程序內部的一條執行序列,或者執行流。每個程序至少有一條執行緒,稱之為主線程。從 的角度看,就是main函式的函式體。在主線程中可以通過執行緒庫建立其他函式執行緒。在同乙個程序中的執行緒都是併發執行的,並且執行緒的執行順序由系統決定。主線程和函式執行緒沒有本質的區別,只是主線程是...