Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Yes as most people recommended the best way seems to have a worker thread reading from a queue. Some code snippets below</p> <pre><code> pthread_t insertThread = NULL; pthread_mutex_t insertConditionNewMutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t insertConditionDoneMutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t insertConditionNew = PTHREAD_COND_INITIALIZER; pthread_cond_t insertConditionDone = PTHREAD_COND_INITIALIZER; //Thread for new incoming connection void * newBatchInsert() { for(each Word) { //Push It into the queue pthread_mutex_lock(&amp;lexicon[newPendingWord-&gt;length - 1]-&gt;insertQueueMutex); lexicon[newPendingWord-&gt;length - 1]-&gt;insertQueue.push(newPendingWord); pthread_mutex_unlock(&amp;lexicon[newPendingWord-&gt;length - 1]-&gt;insertQueueMutex); } //Send signal to worker Thread pthread_mutex_lock(&amp;insertConditionNewMutex); pthread_cond_signal(&amp;insertConditionNew); pthread_mutex_unlock(&amp;insertConditionNewMutex); //Wait Until it's finished pthread_cond_wait(&amp;insertConditionDone, &amp;insertConditionDoneMutex); } //Worker thread void * insertWorker(void *) { while(1) { pthread_cond_wait(&amp;insertConditionNew, &amp;insertConditionNewMutex); for (int ii = 0; ii &lt; maxWordLength; ++ii) { while (!lexicon[ii]-&gt;insertQueue.empty()) { queueNode * newPendingWord = lexicon[ii]-&gt;insertQueue.front(); lexicon[ii]-&gt;insert(newPendingWord-&gt;word); pthread_mutex_lock(&amp;lexicon[ii]-&gt;insertQueueMutex); lexicon[ii]-&gt;insertQueue.pop(); pthread_mutex_unlock(&amp;lexicon[ii]-&gt;insertQueueMutex); } } //Send signal that it's done pthread_mutex_lock(&amp;insertConditionDoneMutex); pthread_cond_broadcast(&amp;insertConditionDone); pthread_mutex_unlock(&amp;insertConditionDoneMutex); } } int main(int argc, char * const argv[]) { pthread_create(&amp;insertThread, NULL, &amp;insertWorker, NULL); lexiconServer = new server(serverPort, (void *) newBatchInsert); return 0; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload