我正在使用 TCP 服务器发送一个字符数组。该函数send()
需要一个char *
,但在此之前,它必须侦听并接受一个连接。鉴于此,我想在接受传入连接时发送最新数据。以前,我使用了两个线程。一个更新缓冲区中的值,另一个只是等待连接,然后发送数据。
我知道不锁定互斥锁可能会出现问题,但除此之外,如果我将它传递char *
给发送函数,而不是将其更新为全局变量,同样的方案会起作用吗?
一些代码来演示:
#include <pthread.h>
char buf[BUFLEN];
void *updateBuffer(void *arg) {
while(true) {
getNewData(buf);
}
}
void *sendData(void *arg) {
//Setup socket
while(true) {
newfd = accept(sockfd, (struct sockaddr *)&their_addr, &size);
send(newfd, buf, BUFLEN, 0);
close(newfd);
}
}
每当建立新连接时,这将发送更新的值。
我想试试这个:
#include <pthread.h>
char buf[BUFLEN];
void *updateBuffer(void *arg) {
while(true) {
getNewData(buf);
}
}
void *sendData(void *arg) {
TCPServer tcpServer;
while(true) {
tcpServer.send(buf);
}
}
其中功能与上面tcpServer.send(char *)
基本相同sendData()
。
这样做的原因是我可以将 TCP 服务器变成一个类,因为我需要在其他地方使用相同的代码。
据我了解,由于我传递的是指针,所以它与我刚刚调用时基本相同send()
,因为我在那里也传递了一个指针。该值将继续更新,但地址不会改变,所以它应该可以工作。请让我知道这是否正确。我也愿意接受新的方法(最好没有互斥锁)。