If you are using DVSDK, the Davinci Multimedia Application Interface (DMAI) provides an abstraction for thread synchronization called Rendezvous. It is typically used for initialization but can also be used for synchronization during regular processing.
Even if you don't use this module, you can do a code walkthrough of its implementation to understand the aspects of thread synchronization. Please refer to the Rendezvous_meet() API for the actual synchronization. Best Regards, Anand Balagopalakrishnan Texas Instruments India ________________________________ From: davinci-linux-open-source-boun...@linux.davincidsp.com [mailto:davinci-linux-open-source-boun...@linux.davincidsp.com] On Behalf Of Gopal Sukumar Sent: Tuesday, May 05, 2009 3:02 PM To: Ondrej Pindroch Cc: davinci-linux-open-source Subject: Re: how to use semaphores 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 Davinci-linux-open-source@linux.davincidsp.com<mailto:Davinci-linux-open-source@linux.davincidsp.com> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source ________________________________ http://www.mindtree.com/email/disclaimer.html
_______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source