如何解决分叉多线程进程
我有一个有两个线程的应用程序。一个线程在一个事件上分叉,另一个线程正在做一些导致大量 getaddrinfo() 调用的事情。 我面临一个问题,在某些情况下,分叉的孩子挂在 getaddrinfo() 调用中的互斥锁上。
现在我明白这只会在父进程中的第二个线程处于 getaddinfo() 调用中时分叉子进程时发生。这会导致死锁,因为子进程继承了父进程的锁但从未释放它。
我的问题是当系统调用本身被锁定时如何解决这个问题? 好吧,我可以修复它的一种方法是同步两个线程中的 fork 系统调用和 getaddrinfo 调用。但是还有其他方法吗?
谢谢!
解决方法
我最终使用 pthread_atfork 来注册分别锁定/解锁的 pre/post-fork 处理程序。 我想这是在这种情况下唯一的出路。
我只是希望这些调用的手册页(如 getaddrinfo)提到它们在内部使用锁,这样程序员就不会落入这个陷阱。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。