문자 배열을 보내기 위해 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);
}
}
이 새로운 연결이 설정 될 때마다 업데이트 된 값을 보낼 것입니다.
나는 이것을 시도 할 : 함수 tcpServer.send(char *)
은 기본적으로 위의 sendData()
같은
#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);
}
}
입니다.
이렇게하는 이유는 다른 곳에서 같은 코드를 사용해야하기 때문에 TCP 서버를 클래스로 만들 수 있기 때문입니다.
포인터를 전달하고 있기 때문에 기본적으로 send()
을 호출 할 때와 동일합니다. 포인터도 거기에 전달하기 때문입니다. 값은 계속 업데이트되지만 주소는 변경되지 않으므로 작동해야합니다. 맞는지 알려주세요. 또한 뮤텍스 잠금을 사용하지 않고이 작업을 수행하는 새로운 방법에 대해서도 열려 있습니다.
감사합니다. 네, 뮤텍스 문제는 문제가 될 수 있지만, 특정 바이트가 읽히는 동안 값을 업데이트하는 경우에만 문제가 될 수 있습니다. 어쨌든 가끔 가치가 잘못 되었다면 문제가되지 않습니다. 다시 한번 감사드립니다. –