pthread execution on linux

后端 未结 2 2058
囚心锁ツ
囚心锁ツ 2020-11-29 13:19

I started doing pthread programming on linux and at the very first programme i got totally confused. Below is the programme I am running

#include 

        
相关标签:
2条回答
  • 2020-11-29 14:00

    First one thing i would like to know is order of thread execution is not sequential ?

    Not normally. Threads on most modern operating systems (early threading implementations on Linux used cooperative multitasking) execute in parallel and the order in which your printfs get executed is partially non deterministic. The pthread_joins impose some ordering on things, so:

    • Thread 1 must come before Amit because the main thread waits for thread 1 to finish before printing Amit1
    • Thread 2 must come before Thread 1 returns: because of the second pthread_join. All of the printfs in main appear in the order they appear in main.

    I hope that answers your question. I'm not entirely sure what you were asking but feel free to ask for clarification on any point.

    0 讨论(0)
  • 2020-11-29 14:18

    You are right in saying that the order of thread execution is not sequential. To some extent, that is the whole point of using threads, i.e. to run other tasks concurrently.

    The output you are seeing is as expected, and can possibly be different.

    Perhaps this will help:

       main            thread1     thread2
        |                
        |--create--------+-----------\
        |                |           |   
        |            "Thread 1"      |   "Thread 2" can
        |                |           |<- occur anywhere
        |               /            |   along this line
       join(1) ---------             |
        |                            |
        |                            |
      "amit"                         |
        |                            |
        |                            |
       join(2) ---------------------/
        |
        |
    "Thread 1 returns"
    "Thread 2 returns"
        |
      exit(0)
    

    The only guarantee you have is:

    • "Thread 1" will always be printed before "amit" (because pthread_join() waits for thread 1 to end before the main program can proceed)
    • "Thread X returns ..." statements will always come at the end, after both threads have terminated.
    0 讨论(0)
提交回复
热议问题