C POSIX线程:最佳中断方法
当我开始使用pthreads时,我被告知的第一件事是——应该避免强制线程取消,比如pthread_cancel。相反,我们应该通过线程通信通道使用线程取消通知 如果我们有一个很长的任务要在线程中运行,我们会将这个任务分成小块,并在每个块处理之后检查取消标志。像这样:C POSIX线程:最佳中断方法,c,linux,gcc,pthreads,c11,C,Linux,Gcc,Pthreads,C11,当我开始使用pthreads时,我被告知的第一件事是——应该避免强制线程取消,比如pthread_cancel。相反,我们应该通过线程通信通道使用线程取消通知 如果我们有一个很长的任务要在线程中运行,我们会将这个任务分成小块,并在每个块处理之后检查取消标志。像这样: loop { process_chunk(); if (check_cancel_flag()) break; } 但是,实现这个check\u cancel\u flag()函数的最佳方法是什么
loop {
process_chunk();
if (check_cancel_flag())
break;
}
但是,实现这个check\u cancel\u flag()函数的最佳方法是什么
根据我在c和linux方面的所有经验,我只记得这些方法:
您知道这个问题的基准点吗?另一种方法是使用读写器锁(
pthread\u rwlock\u t
)来保护该标志,因为您的工作线程需要经常读取它,但它只写入一次
只要在标志检查之间处理的块不是太小,开销就不会太大。有一个确切的问题需要讨论。我认为这有点不同,只是为了消费者/生产者实现。事实上,我使用了队列和等待条件,但是如何中断长任务呢?顺便说一句,C11对数据类型有一个简单的
\u原子
限定<代码>sig_atomic_t永远都不合适,它唯一的保证是关于信号处理程序的,在那里它只保证不可分割性,而不是您想要的其他内存一致性属性。我在C11中写过关于原子的内容。当我们有单个工作线程时,我应该使用sig_atomic_t,并且只在当前线程的信号处理程序中编辑它