当前位置: 首页 > 面试题库 >

使用pthread_cancel取消线程:好的做法还是不好的

朱博实
2023-03-14
问题内容

我在Linux(CentOS 5.3)上有一个C
++程序,它产生多个线程,这些线程处于无限循环中,以执行工作并在特定的时间内hibernate。现在,我必须取消正在运行的线程,以防出现新的配置通知并重新启动新的线程集,为此我使用了pthread_cancel。我观察到的是,即使收到取消指示,线程也不会停止,甚至在完成睡眠后也会出现一些睡眠线程。

由于不希望出现这种行为,因此在上述情况下使用pthread_cancel会引发有关是好做法还是坏做法的问题。

请在上述情况下对pthread_cancel用法进行评论。


问题答案:

通常,取消线程并不是一个好主意。只要有可能,最好有一个共享标志,线程可以使用它来跳出循环。这样,您将让线程执行在实际退出之前可能需要执行的任何清理。

在没有真正取消线程的问题上,POSIX规范确定了一组取消点(man 7 pthreads)。只能在这些点取消线程。如果您的无限循环不包含取消点,则可以通过调用来添加一个pthread_testcancel。如果pthread_cancel已被调用,则此时将对其执行操作。



 类似资料:
  • 问题内容: 我正在开发一个显示图像并播放数据库声音的应用程序。我正在尝试确定是否使用单独的JFrame从GUI向数据库添加图像。 我只是想知道使用多个JFrame窗口是否是一种好习惯? 问题答案: 我只是想知道使用多个JFrames是否是一种好习惯? 坏习惯(坏习惯)。 用户不友好:用户只希望看到一个图标时,会在任务栏中看到多个图标。加上编码问题的副作用。 * 编写和维护代码的噩梦: * 一个模态

  • 问题内容: 我的问题如下。我应该避免在Angular应用程序中使用任何种类的jQuery代码,因为与DOM交互只有一件事是合法的。另一个问题是,是否有人遇到无法找到其他解决方案但只能用jQuery快速编写代码的问题。 谢谢! 问题答案: 是的,这是一个不好的做法,但是有时它可以为您节省很多时间,特别是在您寻找插件时,仅在必要时执行此操作,并在其他解决方案可用时记下备注以将其切换回原来的状态。

  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 在Python中,假设我有一些从Shape继承的类Circle。形状需要x和y坐标,此外,圆需要半径。我希望能够通过执行以下操作来初始化Circle, Circle继承自shape,因此我需要对使用命名参数,因为不同的类需要不同的构造函数。我可以手动设置x,y和r。 或者,我可以使用以下方式自动设置“圈子”的属性 这样做的好处是代码更少,并且我不需要维护样板。缺点是,Circle需要哪

  • 这里使用parentNode好?还是parentElement好? 这是bootstrap中的一段代码,用来查找一个元素的祖先元素中所有匹配selector的元素。 我觉的应该使用parentElement更合适一些。 closet是Element上一的一个方法。 要查找的应该是Element,而不是像Text,Comment这样的Node。 当然这里使用parentNode也是可行的,一般会返回

  • 问题内容: 我正在查看一位同事的代码,但遇到一段类似于以下代码的代码: 我相信没有必要,但我很难证明这一点。如果它更具体(,等等)可能很有意义,但是因为我认为这是不必要的。有人可以给我一些原因,这可能导致什么问题,以及为什么这是不好的做法?还是这个代码可以吗? 问题答案: 该声明是方法合同的一部分。定义合同时,您应始终尽可能 精确 。因此,说是个坏主意。 出于同样的原因,这是不好的做法,因为不好的