gpt4 book ai didi

并发发送数据包

转载 作者:行者123 更新时间:2023-11-30 14:47:20 25 4
gpt4 key购买 nike

我是 C 新手,想了解多线程如何与套接字一起工作。

我了解如何创建线程,但我不了解它们在这种情况下如何工作。

两个线程同时接收数据包。当第一个线程进入receiveData函数并调用recvmsg()时,第二个线程是否会被阻塞,直到第一个线程接收到数据包并退出receiveData函数?

是否有某种方法可以防止其他线程被阻塞?

void * tcp (void * arg){
struct * info = arg;
// set up socket fd
fd = socket(AF_INET, SOCK_STREAM, 0);
while(True){
receiveData(info, fd);
}
}

void * icmp (void * arg){
struct * info = arg;
// set up socket fd
fd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
while(True){
receiveData(info, fd);
}
}

//function that is called by thread 1 and thread 2 concurrently
void receiveData(struct * info, int fd){
int val = recv(fd, buf, 1000, 0);
}

最佳答案

当您有两个像这样的独立套接字时,它们是独立的 - 第一个线程将阻塞,直到其套接字上有数据可用为止,第二个线程将阻塞直到其套接字上有数据可用为止。如果数据到达一个套接字而不是另一个,则在数据到达的套接字上阻塞的线程将解除阻塞(recv 将返回)并循环,直到没有更多数据可用。如果数据到达两个套接字,则两个线程将继续并循环。

关于并发发送数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51393035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com