Hi Ondrej,
"Conditional variables" are one of the most powerful mechanisms for
synchronization of pthreads.
Below is the code for the usage of condition variables for a typical
Producer-Consumer problem. You may google it for complete understanding.
pthread_cond_t cond_queue_empty, cond_queue_full;
pthread_mutex_t task_queue_cond_lock;
int task_available;
/* other data structures here */
main() {
/* declarations and initializations */
task_available = 0;
pthread_init();
pthread_cond_init(&cond_queue_empty, NULL);
pthread_cond_init(&cond_queue_full, NULL);
pthread_mutex_init(&task_queue_cond_lock, NULL);
/* create and join producer and consumer threads */
}
void *producer(void *producer_thread_data) {
int inserted;
while (!done()) {
create_task();
pthread_mutex_lock(&task_queue_cond_lock);
while (task_available == 1)
pthread_cond_wait(&cond_queue_empty,
&task_queue_cond_lock);
insert_into_queue();
task_available = 1;
pthread_cond_signal(&cond_queue_full);
pthread_mutex_unlock(&task_queue_cond_lock);
}
}
void *consumer(void *consumer_thread_data) {
while (!done()) {
pthread_mutex_lock(&task_queue_cond_lock);
while (task_available == 0)
pthread_cond_wait(&cond_queue_full,
&task_queue_cond_lock);
my_task = extract_from_queue();
task_available = 0;
pthread_cond_signal(&cond_queue_empty);
pthread_mutex_unlock(&task_queue_cond_lock);
process_task(my_task);
}
}
By the way, are you using POSIX threads?
~ Gopal Sukumar.
Ondrej Pindroch wrote:
Hi
I have been studying how to use threads. I have successful made one
application, with two threads. I have tied to make something like semaphore.
Now I need to make application with 3 or 4 threads 1. will do capture, 2.
preview, 3. resize and 4. display. I have no idea how to synchronize this all.
I know that it should be something with semaphores. Could some one send me some
example created for davinci, or other hints.
Thanks
Ondrej Pindroch
SoftHard Technology ltd.
________________________________
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]<mailto:[email protected]>
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
________________________________
http://www.mindtree.com/email/disclaimer.html
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source