回覆列表
  • 1 # 使用者2151701896967

    你這個問題很有意思。

    第一次執行的時候,可以看出,能執行0~6共7次;第二次的時候,從6開始,到5,只有2次了,並且以後都是隻有2次。基於你的描述,我想可以用互斥訊號量來做。1、初始化2個訊號量pmutex1(有資源), pmutex2(無資源),初始化gnum=0 2、啟動兩個執行緒 2.1 執行緒1 lock_the_mutex_signal(pmutex1); // 上鎖自身執行緒,首次可執行 while (gnum < 5) { do_sth(); // 做你的業務邏輯 gnum++; // 增加執行次數 } // end while() unlock_the_mutex_signal(pmutex2); // 解鎖另一執行緒 2.2 執行緒2 lock_the_mutex_signal(pmutex2); // 上鎖自己,首次執行將阻塞,並交出CPU while (gnum > 5) { do_sth(); // ... gnum--; // ... } // end while() unlock_the_mutex_signal(pmutex1); // release the lock PS:如果你不是非常嚴格地(從系統級杜絕不該被執行的執行緒被呼叫)要求執行緒切換的話,這個邏輯應該可以工作。自己沒有試,希望你明白我的思想,如有錯誤,自己再修改一下。

  • 中秋節和大豐收的關聯?
  • 爸媽突然要離婚該怎麼辦?