Мой вопрос связан с программированием потоков на языке C.
Моя проблема в том, что я просто хочу создать два потока в моей программе main
.Эти два потока должны работать последовательно, что означает, что мой первый поток должен выполняться первым (никакие другие операторы какого-либо потока не должны выполняться).Первый поток должен иметь полный контроль.Никакие другие операторы какого-либо другого потока, даже main
программные операторы, не должны выполняться до тех пор, пока не завершится первый поток.
После завершения первого потока второй поток должен быть выполнен аналогичноfirst.
После этого должен выполняться мой main.
Я знаю, вы можете сказать, какого черта я хочу это сделать, потому что этого можно добиться, просто создав две функции и вызвав их впоследовательность, но для обучения и для экспериментов я хочу сделать это с помощью потоков.
Я пишу некоторый код на C следующим образом:
void* fun()
{
printf("\nThe thread 1 is running");
}
void* van()
{
printf("\nthread 2 is running ");
}
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
pthread_join(t2,NULL);
}
Программа работает отлично, но я не понимаю работу функции pthread_join()
.
Когда я немного изменяю свой код следующим образом:
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun,NULL);
pthread_join(t2,NULL); // Change
pthread_create(&t2,NULL,van,NULL);
printf("\nI'm in main\n");
}
Теперь, когда я запускаю код, он показывает ошибку сегментации.
Теперь мои вопросы следующие:
- Что такое параметр атрибута в функции
pthread_create()
?Почему мы их используем?Каковы атрибуты по умолчанию для потока?Пожалуйста, объясните на примере. - Какой аргумент в функции
pthread_create()
?Почему мы их используем?Каковы аргументы по умолчанию для потока?Пожалуйста, объясните на примере. - Как на самом деле работает
pthread_join()
?Что это значит, когда мой код вызывает pthread_join()
в основном с t2
в качестве первого аргумента.Означает ли это, что main должен приостановить выполнение до завершения t2 или что-то еще? - Какой второй аргумент в
pthread_join()
?Почему мы используем это?Каково его значение по умолчанию?Пожалуйста, объясните с примером или кодом.