簡體   English   中英

C強制線程在pthread_create之后立即啟動。 pthread_create之后是pthread_yield?

[英]C force the thread to start immediately after pthread_create. pthread_yield after pthread_create?

我正在努力實現以下目標:

pthread_create()之后立即強制新創建的線程開始運行。 沒有使用實時調度。

pthread_create()手冊頁中

除非采用實時調度策略,否則在調用pthread_create()之后,不確定哪個線程(調用者或新線程)接下來將執行。

哪個當然有意義。 因此,我認為通過使用pthread_yield()可以強制新創建的線程接管並因此開始。 但這種情況並非如此。

我只能通過在pthread_create()之后休眠來獲得所需的結果。 但是我不想依靠這個解決方案。

  1. 為什么我無法通過pthread_yield()實現我的目標?
  2. 除了使用睡眠以外,還有其他方法嗎?
  3. 新線程的創建與任務切換的處理方式相同,即是否遵循調度策略? 例如,在RT(搶占式)調度中,如果新創建的線程具有更高的優先級,它將立即搶占當前線程嗎?

相關文章:

謝謝!

如果您使用的是多核系統,則可能會將新線程安排在與創建它的線程不同的內核上。 調用pthread_yield()可能不會達到預期的效果,因為它可能只影響調用者核心的調度,而不會影響其他任何核心。 效果通常是將線程放在可運行隊列的末尾。 (還值得注意的是, pthread_yield()不是標准的系統調用,因此沒有關於其預期行為的標准參考。)

如果睡眠時間不為零,則調用sleep()可能會產生不同的結果。 該線程實際上放置在計時器喚醒隊列中,並且在計時器到期后必須將其移回可運行隊列。 這將更有可能在創建線程喚醒之前在其他內核上運行新線程。

如果新線程的優先級高於創建它的線程,它將優先於創建線程。

如注釋中所建議,可以通過使創建線程有條件地等待來自新創建線程的信號來實現可預測的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM