Stories
Slash Boxes
Comments

SoylentNews is people

posted by Fnord666 on Sunday April 23 2017, @12:17AM   Printer-friendly
from the silk-threads dept.

The article is a bit old, but still interesting.

Linux has an elegant and beautiful design when it comes to threads: threads are nothing more than processes that share a virtual address space and file descriptor table. Threads spawned by a process are additional child processes of the main "thread's" parent process. They're manipulated through the same process management system calls, eliminating the need for a separate set of thread-related system calls. It's elegant in the same way file descriptors are elegant.

Normally on Unix-like systems, processes are created with fork(). The new process gets its own address space and file descriptor table that starts as a copy of the original. (Linux uses copy-on-write to do this part efficiently.) However, this is too high level for creating threads, so Linux has a separate clone() system call. It works just like fork() except that it accepts a number of flags to adjust its behavior, primarily to share parts of the parent's execution context with the child.

It's so simple that it takes less than 15 instructions to spawn a thread with its own stack, no libraries needed, and no need to call Pthreads! In this article I'll demonstrate how to do this on x86-64. All of the code with be written in NASM syntax since, IMHO, it's by far the best (see: nasm-mode).

I've put the complete demo here if you want to see it all at once:


Original Submission

 
This discussion has been archived. No new comments can be posted.
Display Options Threshold/Breakthrough Mark All as Read Mark All as Unread
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • (Score: -1, Offtopic) by Ethanol-fueled on Sunday April 23 2017, @01:22AM (3 children)

    by Ethanol-fueled (2792) on Sunday April 23 2017, @01:22AM (#498126) Homepage

    Is Linux development racist and sexist? We need more women pthreads there.

    %Black_women_allowed = 1

    %Fuck_you_nigga_allowed = 2

    %Exit_zero goddamn niggas = uint16_t value = *(uint16_t*)ptr;

    printf("\nlVptr[60 ] is %d \n", *(int*)"Goddamn Nigga" lVptr);

    Starting Score:    1  point
    Moderation   -2  
       Offtopic=1, Flamebait=1, Total=2
    Extra 'Offtopic' Modifier   0  

    Total Score:   -1  
  • (Score: 0) by Anonymous Coward on Sunday April 23 2017, @01:46AM

    by Anonymous Coward on Sunday April 23 2017, @01:46AM (#498135)

    Linus Torvalds, is that you?

  • (Score: 0) by Anonymous Coward on Sunday April 23 2017, @01:53AM (1 child)

    by Anonymous Coward on Sunday April 23 2017, @01:53AM (#498136)

    SIGTERM - execution aborted, core dumped.

    • (Score: 1, Touché) by Anonymous Coward on Sunday April 23 2017, @01:27PM

      by Anonymous Coward on Sunday April 23 2017, @01:27PM (#498314)

      If only his mother aborted....