【发布时间】:2011-01-22 04:52:15
【问题描述】:
我同时使用 Linux 和 Win32 套接字 API。在我的程序中,多个线程共享一个套接字句柄。特别是,多个线程使用共享套接字句柄(即相同的端口)调用send。在这种情况下,我是否必须为线程安全加锁?我无法找到答案。我可能会做一个测试,但想听听你的经验。
编辑:我知道这样通过套接字发送数据根本不是原子操作。当然,我们必须使用互斥锁来保证线程安全。但是,我想知道系统 API 是否可以有自己的内部锁。如果是这样,我们可以省略自己的锁。
这个问题也可能适用于fprintf 函数。我想知道这样的系统 API 会有自己的锁。根据我的经验,从多个线程调用fprintf 并没有杀死我的程序,尽管文件或标准输出存在竞争(即不一致或不可预测的输出,但程序没有崩溃),这意味着fprintf 有一个锁以保护其内部数据结构。
【问题讨论】:
-
在我看来,多线程读写同一个套接字是一个事实上的设计问题。
标签: c++ c multithreading networking sockets