Я использую 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()
, так как я также передаю указатель там. Значение будет продолжать обновляться, но адрес не изменится, поэтому он должен работать. Пожалуйста, дайте мне знать, если это правильно. Я также открыт для новых способов сделать это (без блокировок мьютексов, желательно).
Спасибо! Да, проблема с мьютексом может быть проблемой, но только если конкретный байт обновляет свое значение во время чтения. В любом случае, это нормально, если случайное значение неверно. Еще раз спасибо. –