C , how to create thread using pthread_create function

前端 未结 2 646
北恋
北恋 2021-02-01 18:39

I\'m making a c file for a dispatch queue that gets a task and put it in to a queue which is the linked list. In order to do this, I need to create threads using



        
相关标签:
2条回答
  • 2021-02-01 18:55

    The four parameters to pthread_create are, in order:

    1. A pointer to a pthread_t structure, which pthread_create will fill out with information on the thread it creates.

    2. A pointer to a pthread_attr_t with parameters for the thread. You can safely just pass NULL most of the time.

    3. A function to run in the thread. The function must return void * and take a void * argument, which you may use however you see fit. (For instance, if you're starting multiple threads with the same function, you can use this parameter to distinguish them.)

    4. The void * that you want to start up the thread with. Pass NULL if you don't need it.

    0 讨论(0)
  • 2021-02-01 19:07

    clarifying duskwuff's answer:

    work parameter is a function pointer. The function should take one argument which is indicated as type void * and return value void *.

    param is expected to be a pointer to the data that work will receive.

    As an example, lets say you want to pass two int to the worker. Then, you can create something like this:

    int *param = (int *)malloc(2 * sizeof(int));
    param[0] = 123;
    param[1] = 456;
    pthread_create(&cThread, NULL, work, param);
    

    Then your work function can convert the pointer type and grab the param data:

    void *work(void * parm) {
        int *param = (int *)parm;
        int first_val = param[0];
        ....
    }
    

    You can do more complex stuff, like creating a struct with all of the data you need to pass.

    0 讨论(0)
提交回复
热议问题