当线程退出(在其析构函数中)时,是否有一种万无一失的方法来自动释放线程持有的互斥锁?
我一直在采取的方法是为每个互斥体创建一个结构,该结构体持有持有它的线程的身份,然后在析构函数中扫描这个列表,如果有任何互斥体与正在完成的线程匹配,然后释放它。但我认为这实际上有一个竞争条件:如果在我锁定互斥锁之后但在我设置数据结构之前调用析构函数会发生什么?
我还查看了 pthread_mutexattr_setrobust_np,但我的理解是 np 函数是不可移植的,我过去曾遇到过问题。
作为参考,每个线程都与一个 TCP/IP 连接相关联,并且锁定/解锁是响应此连接上的请求而发生的。如果连接异常关闭,我需要清理,即释放所有持有的锁。