Sunday, January 9, 2022

[SOLVED] create threads but don't run it immediately in linux

Issue

I am trying to execute my program in threads, I use pthread_create(), but it runs the threads immediately. I would like to allow the user to change thread priorities before running. How it is possible to resolve?

for(int i = 0; i < threads; i++)
{
   pthread_create(data->threads+i,NULL,SelectionSort,data);
   sleep(1);
   print(data->array);
}

Solution

Set the priority as you create the thread.

Replace

errno = pthread_create(..., NULL, ...);
if (errno) { ... }

with

pthread_attr_t attr;
errno = pthread_attr_init(&attr);
if (errno) { ... }

{
    struct sched_param sp;
    errno = pthread_attr_getschedparam(&attr, &sp);
    if (errno) { ... }

    sp.sched_priority = ...;

    errno = pthread_attr_setschedparam(&attr, &sp);
    if (errno) { ... }
}    

/* So our scheduling priority gets used. */
errno = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
if (errno) { ... }

errno = pthread_create(..., &attr, ...);
if (errno) { ... }

errno = pthread_attr_destroy(&attr);
if (errno) { ... }


Answered By - ikegami