[英]How can I cancel a thread using C++?
POSIX 提供了 function pthread_cancel 來取消線程執行,但似乎 C++ 沒有提供這樣的 function p_cancelthread 和混合線程? 我還在 linux 系統上看到,std::thread 是 POSIX 線程的包裝器
盡管 pthread_cancel 沒有確切的替代品,但您可以使用jthread來接近。
class jthread 表示單個執行線程。 它具有與 std::thread 相同的一般行為,除了 jthread 在銷毀時自動重新加入,並且可以在某些情況下取消/停止。
這不會中斷線程,但仍然依賴於“合作”機制。 正在運行的 jthread 必須不斷輪詢它的停止令牌並自行停止。
一個很好的例子可以在 這里找到。
std::jthread sleepy_worker([] (std::stop_token stoken) {
for(int i=0; i < 10; i++) {
std::this_thread::sleep_for(300ms);
if(stoken.stop_requested()) {
std::cout << "Sleepy worker is requested to stop\n";
return;
}
std::cout << "Sleepy worker goes back to sleep\n";
}
});
sleepy_worker.request_stop();
sleepy_worker.join();
但是直截了當地回答你的問題:不,(目前,c++20)沒有可移植的方式來取消線程。
PS:實際上“殺死”一個線程(或與此相關的任何事情)通常應該避免。 因此,我個人懷疑您是否會在 ISOC++ 中看到它的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.