cha32.线程取消

读书笔记

带参宏

从作用域的角度上看,带参宏和函数的区别:

  • 函数有新的函数栈,而带参宏没有,因而带参宏在不同作用域调用时,会受到作用域的影响。如在宏A中的定义的变量,也会影响后续。
  • 如果一对作用相反的带参宏,如本节的pthread_cleanup_pushpthread_cleanup_pop,很多实现都是使用带参宏,那么这两个宏调用时必须属于同一个代码块

?,保证push的作用域包含pop不就好了吗

线程取消

线程取消状态可设置为启用和禁用。

  • 若启用,则可以取消,但何时响应未知,依赖于取消类型
  • 若禁用,将取消请求挂起,直到允许取消

线程取消类型

  • 延迟取消,直到取消点(某些特定的系统调用或库函数,如cond_wait等

  • 异步取消,随时都可以取消

    • 包括malloc,free执行过程中,若在这些函数中取消,则很有可能会导致后续内存分配的过程出现错误。
    • 异步取消线程不应该分配资源,(那么是否可以在分配,释放内存时暂时禁止取消,或在计算密集任务开始时设置为异步,结束后恢复?)
    • 适用于计算密集型,长时间没有取消点的情况。
  • 可以手动产生取消点pthread_testcancel(),若调用前已经有了取消请求,则线程会终止

作者

Meow Meow Liu

发布于

2023-06-29

更新于

2024-04-23

许可协议

评论