Как добавить в массив на основе потока в C

#arrays #c #pthreads

#массивы #c #pthreads

Вопрос:

Я пытаюсь создать массив, который хранит целые числа и обновляется от одного до нескольких потоков. Когда потоки получают новые данные, им необходимо добавить их в массив. Что я хотел бы сделать, так это создать массив, и чтобы каждый индекс в массиве был для отдельного потока. Моя проблема в том, что я не уверен, как идентифицировать потоки, кроме pthread_self(), и это здесь не кажется полезным. Я не уверен, возможно ли это, поэтому, даже если ответ таков, что это невозможно, это помогает.

Комментарии:

1. Вы можете передать аргумент каждому потоку, чтобы указать ему, какой индекс использовать. Прочитайте справочную страницу pthread_create . Последний параметр — это аргумент, который передается в процедуру запуска потока.

2. хм? это звучит как проблема xy. Что именно вы пытаетесь сделать?

3. Kaylum вы знаете, могу ли я передать несколько параметров? Я думаю, что ваша идея сработает, но я уже передаю параметр, который является указателем на структуру, из которой им нужны данные. Я попытался добавить int в структуру, чтобы они могли просто взять его оттуда, но, похоже, это приводит к изменению числа, которое я передал, так что, когда я увеличиваю число для следующего потока, оно также обновляет его для всех предыдущих потоков. Если бы был способ скопировать данные указателя, чтобы, даже если я позже изменил указатель, переменная, в которой я сохранил данные, не пострадала, я думаю, это также исправило бы это

4. Antti Я читаю из файла, и каждый раз, когда я получаю число, я передаю его в поток. Поток принимает его, а затем переходит в режим ожидания в течение этого периода времени. Это для имитации запуска нескольких процессов. В конце мне нужно получить все данные о том, как долго выполнялся каждый поток, а затем найти поток, который выполнялся в течение самого долгого и короткого промежутка времени.

5. Хорошо, итак, некоторые обновления. Я могу передать правильные идентификационные данные и заставить потоки сохранить их. Единственная проблема заключается в том, что мне приходится спать в течение секунды после создания каждого потока, что не идеально. Это потому, что, поскольку я делаю это сейчас, в stuct есть поле int, из которого они получают свой идентификатор. Однако к тому времени, когда поток начал запоминать данные, основной поток увеличил эту переменную. Это сработает, но кажется ужасным решением, и это заставляет программу занимать больше времени, особенно по мере добавления большего количества потоков. Приветствуются любые идеи или ссылки