2015-11-17 5 views
0

Я хочу, чтобы каждый из моих потоков вызывал несколько функций. Как я могу это достичь? Сейчас у меня есть код для потоков, требующих только одну функцию:pthread работает несколько раз

pthread_attr_init(&attributes); 
if((tid1 = pthread_create(&thread[0],&attributes,produce,NULL))) 
{ 
    printf("\nError in the producer thread\n"); 
    printf("\n"); 
} 

if((tid2 = pthread_create(&thread[1],&attributes,consume,NULL))) 
{ 
    printf("\nERror in the consumer thread\n"); 
} 

pthread_join(thread[0],NULL); 
pthread_join(thread[1],NULL); 

бы призывающую pthread_create икру две новые темы?

+1

Функция, которую вы передаете 'pthread_create', похожа на' main' на вашу программу: ее отправную точку. Затем вы можете поставить все, что захотите, в качестве кода внутри этой функции ... В чем проблема? –

+0

Я предполагаю, что я не понимаю, как я могу поместить несколько функций в pthread_create. – ballballbobo

+0

@ballballbobo Можете ли вы поместить функцию в другую функцию? – this

ответ

1

Вы не можете «передать» несколько функций pthread_create(). Для этого просто не предусмотрено. Тем не менее, вы можете вызывать любые функции, которые вы хотите в функции потока, как и любой другой вызов функции.

void *produce(void *arg) 
{ 
    func1(); 
    func2(); 
    ... 
} 

void *consume(void *arg) 
{ 
    funcx(); 
    funcy(); 
    ... 
} 

int main(void) 
{ 
... 

if((tid1 = pthread_create(&thread[0],&attributes,produce,NULL))) 
{ 
    printf("\nError in the producer thread\n"); 
    printf("\n"); 
} 

if((tid2 = pthread_create(&thread[1],&attributes,consume,NULL))) 
{ 
    printf("\nERror in the consumer thread\n"); 
} 
... 
} 

Или, если то, что вы хотели, отдельные нити для каждого из них (например, func1 и func2 в образце) функции как отдельные нити, то вам просто нужно позвонить pthread_create() столько раз, с каждой из этих функций, аргумент (т.е. функция потока).