Я работаю на сервере, который имеет вектор потоков, как это:Стирание нити внутри функции она делает
vector<thread> thred;
И каждый раз, когда клиент подключается к серверу, он создает новый поток в сервер, например:
thred.push_back(thread(NewClient, ClientSocket, recvbuf, recvbuflen));
thred[thred.size()-1].detach();
Где NewClient функция с аргументами ClientSocket, recvbuf и recvbuflen. Поэтому мой вопрос заключается в том, есть ли какой-либо способ или функция, которую я могу использовать внутри NewClient, чтобы закрыть поток и удалить элемент вектора, который использует сам fuction.
Любая помощь будет оценена по достоинству.
Одна из проблем, о которых я могу думать, чтобы синхронизировать это, чтобы вы не получали никаких гонок данных, вам понадобится блокировка мьютекса, но если вы удалите блокирующий поток, пока он все еще заблокирован, вы у вас больше нет нити, чтобы разблокировать ресурс. Который бы навсегда заблокировал вашу программу. – Stephen
@ simpel01 прямо сейчас это то, что делает программа, вектор растет для каждого соединения, и моя цель состоит в том, чтобы иметь только элемент для каждого соединения, которое есть в данный момент, поэтому когда NewClient заканчивается, я хотел бы удалить поток и элемент вектора? там в любом случае? – 19mike95
@Stephen да, это будущая проблема, но в настоящее время у нас нет мьютекса, поэтому я задаюсь вопросом, есть ли что-то, чтобы закрыть поток, стереть вектор и разблокировать мьютекс (внутри функции NewClient, i – 19mike95