【发布时间】:2016-09-29 13:20:04
【问题描述】:
我有一个进程 ProcessA 启动 2 个线程 ThreadA 和 ThreadB。两个线程都使用相同的套接字描述符从 ProcessB 发送和接收数据。
所以本质上:
int s;
void thread_fnA(void*)
{
while(1) {
sendto(s);
recvfrom(s);
}
}
void thread_fnB(void*)
{
while(1) {
sendto(s);
recvfrom(s);
}
}
int main()
{
s = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(s);
dispatch_thread(A);
dispatch_thread(B);
}
线程B要接收的消息是否有可能在线程A中接收到。
所以事件顺序:
线程 A 准备消息并调用 sendto();
线程 B 开始执行并准备消息并调用 sendto();
线程 B 与线程 A 同时调用 recvfrom()。
但是两个线程期望的消息内容是不同的。 可以交换消息吗,ThreadB 指定的消息被 ThreadA 接收。
发送和接收是否应该涉及某些锁。 (互斥体)
【问题讨论】:
标签: linux multithreading sockets network-programming pthreads