Threading Implementation

若如初见. 提交于 2019-12-06 06:59:57

问题


I wanted to know how to implement my own threading library.
What I have is a CPU (PowerPC architecture) and the C Standard Library.

Is there an open source light-weight implementation I can look at?


回答1:


At its very simplest a thread will need:

  1. Some memory for stack space
  2. Somewhere to store its context (ie. register contents, program counter, stack pointer, etc.)

On top of that you will need to implement a simple "kernel" that will be responsible for the thread switching. And if you're trying to implement pre-emptive threading then you'll also need a periodic source of interrupts. eg. a timer. In this case you can execute your thread switching code in the timer interrupt.

Take a look at the setjmp()/longjmp() routines, and the corresponding jmp_buf structure. This will give you easy access to the stack pointer so that you can assign your own stack space, and will give you a simple way of capturing all of the register contents to provide your thread's context.

Typically the longjmp() function is a wrapper for a return from interrupt instruction, which fits very nicely with having thread scheduling functionality in the timer interrupt. You will need to check the implementation of longjmp() and jmp_buf for your platform though.

Try looking for thread implementations on smaller microprocessors, which typically don't have OS's. eg. Atmel AVR, or Microchip PIC. For example : discussion on AVRFreaks




回答2:


For a decent thread library you need:

  • atomic operations to avoid races (to implement e.g a mutex)
  • some OS support to do the scheduling and to avoid busy waiting
  • some OS support to implement context switching

All three leave the scope of what C99 offers you. Atomic operations are introduced in C11, up to now C11 implementations don't seem to be ready, so these are usually implemented in assembler. For the later two, you'd have to rely on your OS.




回答3:


Maybe you could look at C++ which has threading support. I'd start by picking some of their most useful primitives (for example futures), see how they work, and do a simple implementation.



来源:https://stackoverflow.com/questions/9864240/threading-implementation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!