Валерия, код-то неправильный 1.
| Код | void * thread_func(void *arg) { int loc_id = (int)arg; //делаем какието фичи str_cat(all, что-то); } ... pthread_create(&threads[i], NULL, thread_func, (void*)i);
|
2.
Цитата(Валерия @ 27.4.2008, 19:44 ) | | Собственно, как сделать что бы на протяжении n секунд, если какаята из функций потока не успела выполниться, или если всё повыполняеться, то что бы скрипт остановился и вывел содержимое all? |
| Код | static atomic_t count = ATOMIC_INIT(10); static pthread_cond_t waiter = PTHREAD_COND_INITIALIZER; static pthread_mutex_t all_mutex = PTHREAD_MUTEX_INITIALIZER;
void * thread_func(void * arg) { int loc_id = (int)arg; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_DEFFERED, NULL); //делаем какието фичи pthread_mutex_lock(&all_mutex); str_cat(all, что-то); pthread_mutex_unlock(&all_mutex); if (atomic_dec_and_test(&count)) pthread_cond_signal(&waiter); }
int main(int argc, char * argv[]){ int i; pthread_t threads[10]; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; struct timespec timespec = { .tv_sec = 3, .tv_nsec = 0 }; pthread_mutex_lock(&mutex); for (i=0; i<10; i++) pthread_create(&threads[i], NULL, thread_func, (void*)i); pthread_cond_timedwait(&waiter, &mutex, ×pec); pthread_mutex_unlock(&mutex); for (i=0; i<10; i++) pthread_cancel(threads[i]); while (atomic_read(&count)); return 0; }
|
|