线程退出未定义行为
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <chrono> #include <pthread.h>std::mutex mtx; std::condition_variable cv; bool ready = false;void worker_thread() {std::unique_lock<std::mutex> lock(mtx);// 如果在此处被pthread_cancel,会导致问题cv.wait(lock, []{ return ready; });std::cout << "Worker thread completed" << std::endl; }int main() {std::thread t(worker_thread);// 模拟一些工作std::this_thread::sleep_for(std::chrono::milliseconds(100));// 危险操作:在条件变量等待时取消线程 pthread_cancel(t.native_handle());t.join(); // 这里可能会出现问题return 0; }
在 C++11 中,当线程在条件变量上等待时被 pthread_cancel 取消,确实会导致未定义行为,通常会使程序调用 std::terminate;最终导致崩溃
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945431.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!