Я пытаюсь создать простую программу чата в C. Для каждого клиента я создаю новый поток, чтобы сервер мог обрабатывать связь с несколькими пользователями одновременно. Я храню каждые пользовательские данные в stucture следующим образом:Предотвращение зависания конкретных данных от перезаписи C
struct User /*structure to handle all clients*/
{
int port;
char username[10];
struct User*connected;
struct User*next;
};
В основном потоке, я создаю новый поток и передать в структуре для пользователя:
pthread_create(&thr,NULL,server,(void*)&args);
Это делается для каждого пользователь.
Теперь, когда создается каждый новый поток, я копирую структуру пользователя из аргументов, которые будут использоваться в потоке.
void *server(void * arguments)
{
struct User*cur_user = arguments;
}
Это прекрасно работает для первого пользователя, однако, когда новый пользователь присоединяется, информация из аргументов переписывается.
Я понимаю, что потоки обмениваются данными в программе. Однако есть ли способ скопировать аргументы и их же в локальную переменную в потоке, чтобы они были только областью потоков? Другими словами, как я могу использовать переменную cur_user
в потоке, не изменив ее содержимое другими потоками?
EDIT:
Я попытался скопировать память, но я не много удачи:
struct User args;
struct User*new_arg = malloc(sizeof(struct *new_arg));
memcpy(new_arg, *args, sizeof(new_arg))
что-то не так с моей таНос?
Благодарим за помощь. У меня возникли проблемы с распределением новой памяти. Я добавил комментарии выше –
@AdamJakiela: Либо 'sizeof * new_arg', либо' sizeof (struct User) '. Я предпочитаю первый. Кроме того, назначение работает, нет необходимости в memcpy. '* new_arg = arg;' просто отлично. – rici