我們之前講了進程,今天我們重新認識另外一個概念---線程。我們首先會想到的是進程和線程有什么區別和聯系,對吧?進程是由程序執行起來,跑在操作系統的,是系統進行資源分配和調度的基本單位。進程具有資源獨占性,進程是只有通過進程間通信才能進入臨界區享受臨界資源,訪問同一塊地址空間。而線程是什么呢?線程最大的特點就是資源共享,在同一個進程中,各個線程之間資源是共享的。說到這里,我就舉一個現實生活中最普遍的例子吧~~
大家無時無刻不在用qq吧!(可能說的有點夸張,但是還好還好)當你在計算機上運行qq這個進程時,可能會同時有多個好友給你發送消息,然而你也可以同時接收到那些消息,我們就可以把多個好友發送消息稱為多個線程。當然進程就是qq啊,微信啊,在計算機上運行的稱為多個進程。
線程和進程類似,也有創建線程,線程終止,線程等待。
1、創建線程
創建進程例子:
運行結果:
結果中輸出main pthread run!說明主線程創建成功。
2、線程終止
在進程終止時,我們直接用exit就可以使進程退出。在這里,線程終止可以用exit嗎?看一下這個例子:
運行結果:
看看這個結果,顯然當你要退出子線程的時候,若用exit,會使整個進程都終止,但是我們并不想讓它的主線程也終止。
下面就來介紹一下線程終止的幾種方式:
①退出線程,需要從線程中return,則該線程退出;
②退出線程,可以用pthread_exit,終止該線程;
③用pthread_cancel取消該線程。
我們一一作以講解吧~
①
運行結果:
用return返回子線程可以達到預期的效果,而且不影響主線程的運行;在這里子線程退出后,主線程每隔三秒打一次。
②
運行結果:
這個例子通過pthread_exit也可以使子進程終止。
③
運行結果:
在這里,thread線程被別的線程調用pthread_cancel異常終止掉。
★那么線程間是如何通信的呢?
我們可以設置一個全局變量。
比如:
運行結果:
這個程序執行的功能是使主線程和子線程交替運行,讓主線程sleep三秒,子線程sleep一秒;這里還說明了一個問題,用一個全局變量來使線程通信,共享同一份資源,當子線程中的count改變的時候主線程中的count也隨之改變。
這是線程的一部分哦,,在下次寫線程(2)的時候再介紹其他內容吧~~