#arrays #c #pthreads
#массивы #c #pthreads
Вопрос:
Я пытаюсь создать массив, который хранит целые числа и обновляется от одного до нескольких потоков. Когда потоки получают новые данные, им необходимо добавить их в массив. Что я хотел бы сделать, так это создать массив, и чтобы каждый индекс в массиве был для отдельного потока. Моя проблема в том, что я не уверен, как идентифицировать потоки, кроме pthread_self(), и это здесь не кажется полезным. Я не уверен, возможно ли это, поэтому, даже если ответ таков, что это невозможно, это помогает.
Комментарии:
1. Вы можете передать аргумент каждому потоку, чтобы указать ему, какой индекс использовать. Прочитайте справочную страницу pthread_create . Последний параметр — это аргумент, который передается в процедуру запуска потока.
2. хм? это звучит как проблема xy. Что именно вы пытаетесь сделать?
3. Kaylum вы знаете, могу ли я передать несколько параметров? Я думаю, что ваша идея сработает, но я уже передаю параметр, который является указателем на структуру, из которой им нужны данные. Я попытался добавить int в структуру, чтобы они могли просто взять его оттуда, но, похоже, это приводит к изменению числа, которое я передал, так что, когда я увеличиваю число для следующего потока, оно также обновляет его для всех предыдущих потоков. Если бы был способ скопировать данные указателя, чтобы, даже если я позже изменил указатель, переменная, в которой я сохранил данные, не пострадала, я думаю, это также исправило бы это
4. Antti Я читаю из файла, и каждый раз, когда я получаю число, я передаю его в поток. Поток принимает его, а затем переходит в режим ожидания в течение этого периода времени. Это для имитации запуска нескольких процессов. В конце мне нужно получить все данные о том, как долго выполнялся каждый поток, а затем найти поток, который выполнялся в течение самого долгого и короткого промежутка времени.
5. Хорошо, итак, некоторые обновления. Я могу передать правильные идентификационные данные и заставить потоки сохранить их. Единственная проблема заключается в том, что мне приходится спать в течение секунды после создания каждого потока, что не идеально. Это потому, что, поскольку я делаю это сейчас, в stuct есть поле int, из которого они получают свой идентификатор. Однако к тому времени, когда поток начал запоминать данные, основной поток увеличил эту переменную. Это сработает, но кажется ужасным решением, и это заставляет программу занимать больше времени, особенно по мере добавления большего количества потоков. Приветствуются любые идеи или ссылки