c語言程序設(shè)計(jì)基礎(chǔ) C語言多線程并發(fā)執(zhí)行不隨機(jī)?
C語言多線程并發(fā)執(zhí)行不隨機(jī)?1:pthreaduujoin與并發(fā)或非并發(fā)無關(guān)。它意味著在返回之前等待子線程完成。你的代碼有一個(gè)問題,就是只等待最后一個(gè)線程的結(jié)束,你的pthreadjoin的第一個(gè)參數(shù)
C語言多線程并發(fā)執(zhí)行不隨機(jī)?
1:pthreaduujoin與并發(fā)或非并發(fā)無關(guān)。它意味著在返回之前等待子線程完成。你的代碼有一個(gè)問題,就是只等待最后一個(gè)線程的結(jié)束,你的pthreadjoin的第一個(gè)參數(shù)是最后一個(gè)線程的ID。但是它與并發(fā)順序無關(guān)
2:你的CPU只有一個(gè)核心嗎?多線程只能在多核CPU上運(yùn)行,它可以將線程分配給不同的CPU并并發(fā)執(zhí)行(即隨機(jī)執(zhí)行)。但我不認(rèn)為現(xiàn)在有很多單核CPU,除非你是一個(gè)虛擬機(jī),只分配了一個(gè)核心。此外,即使使用單個(gè)內(nèi)核,如果線程執(zhí)行的任務(wù)需要很長(zhǎng)時(shí)間,系統(tǒng)也會(huì)交替執(zhí)行任務(wù)片。所以您的主要問題如下:
3:您的子線程的執(zhí)行速度幾乎等于創(chuàng)建速度,即線程一創(chuàng)建就完成了,所以沒有時(shí)間進(jìn)行隨機(jī)分配。您可以在子線程中執(zhí)行更多操作,例如為每個(gè)子線程連續(xù)打印1000行。如果你再看一遍,你會(huì)發(fā)現(xiàn)多線程沒有足夠的時(shí)間,這是隨機(jī)的。
c語言有沒有多線程這個(gè)概念?
線程:線程是程序中的執(zhí)行流。每個(gè)線程都有自己的特殊寄存器(堆棧指針、程序計(jì)數(shù)器等),但代碼區(qū)域是共享的,即不同的線程可以執(zhí)行相同的函數(shù)。
多線程:多線程是指一個(gè)程序包含多個(gè)執(zhí)行流,即一個(gè)程序可以運(yùn)行多個(gè)不同的線程來同時(shí)執(zhí)行不同的任務(wù),也就是說,一個(gè)程序可以創(chuàng)建多個(gè)并行執(zhí)行線程來完成自己的任務(wù)。
C語言設(shè)計(jì)之初,沒有設(shè)計(jì)多線程機(jī)制,因?yàn)殡S著軟硬件的發(fā)展和需求的發(fā)展。后來,C語言開發(fā)了線程庫來支持多線程操作和應(yīng)用。
本文主要介紹了基于Linux的C多線程技術(shù)。在編譯C多線程時(shí),一方面必須指定Linux C語言的多線程庫pthread才能正確編譯(例如:GCC test)。C-O test-lpthread);另一方面,必須包含線程頭文件include