4
0
Fork
You've already forked dfthread
0
1414 portable C threading library https://doublefourteen.io
  • C 94.7%
  • Makefile 5.3%
2023年07月11日 13:42:53 +02:00
.gitignore [.gitignore] Add .gitignore 2023年07月05日 19:26:55 +02:00
_dfthread_unix.h [*] Add sources 2023年07月05日 20:08:14 +02:00
_dfthread_win32.h [*] Add sources 2023年07月05日 20:08:14 +02:00
_dfthreadcompdef.h [_dfthreadcompdef.h] Add compiler specific features header 2023年07月11日 12:36:23 +02:00
df_call_once.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_call_once_win32.c [df_call_once_win32.c] Force stack alignment on x86, fixed GCC alignment issues on Windows stdcall functions. 2023年07月11日 12:44:40 +02:00
df_cond_broadcast.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_cond_destroy.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_cond_init.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_cond_signal.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_cond_wait.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_current_thread.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_hw_concurrency.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_mutex_destroy.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_mutex_init.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_mutex_lock.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_mutex_trylock.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_mutex_unlock.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_thread_create_unix.c [*] Add sources 2023年07月05日 20:08:14 +02:00
df_thread_create_win32.c [df_thread_create_win32.c] Remove useless include 2023年07月11日 13:10:15 +02:00
df_thread_equal.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_thread_join.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_thread_sleep.c [*] Make inline externs less verbose, minor style fixes 2023年07月11日 12:43:36 +02:00
df_thread_sleep_win32.c [*] Add sources 2023年07月05日 20:08:14 +02:00
dfthread.h [dfthread.h] Use _dfthreadcompdef.h to make compiler probing more structured. 2023年07月11日 12:37:56 +02:00
dfthreaddef.h [dfthreaddef.h] Remove hard __GNUC__ definition check 2023年07月11日 12:37:05 +02:00
LICENSE [LICENSE] Improve and format license 2023年07月05日 19:26:40 +02:00
Makefile [Makefile] Add _dfthreadcompdef.h 2023年07月11日 13:42:53 +02:00
Makefile.mingw [Makefile] Add _dfthreadcompdef.h 2023年07月11日 13:42:53 +02:00
README.md [README] Fix minor error 2023年07月06日 00:33:49 +02:00

1414 Portable C Concurrency Library

dfthread implements basic and portable threading and syncrhonization primitives.

The interface mimics standard C11 threading.

dfthread works on Windows and any platform supporting POSIX threads. It requires a GNU C compatible compiler to build.

Why?

Because standard C11 threading is seldom implemented, and considered optional by the standard itself.

So I felt the necessity of a reliable, lightweight, basic threading library that would give me the most basic primitives to write portable concurrent code.

dfthread also has a few important differences compared to standard C11 threading:

  • Thread creation allows to specify stack size hint and CPU affinity.
  • Mutexes and condition variables can be initialized statically.
  • There is no support for recursive mutexes.
  • There is no support to detach a thread.
  • Threads can't return a value upon exit.

Design choices

  • Only supports GNU C compatible compilers (e.g. GCC, clang, Intel C Compiler), since dfthread uses GNU C extensions to provide additional safety and scoped resource acquisition and release.

  • Do not aim to be compatible with C++.

  • Only support static linking, in order to be as lightweight as possible, and allow stripping unnecessary functionality from the final executable.

  • Make extensive use of inline functions, to keep the performance as close as possible to using platform primitives directly.

Building

dfthread uses Makefile to manage its build .

You can build dfthread using make, running the following command:

$ make

Or, equivalently:

$ make all

You can customize the compilation flags using the CFLAGS variable, for example:

$ make CFLAGS="-Os"

Other familiar variables, such as CC, AR, ARFLAGS and RANLIB are also supported.

To remove any file generated by a previous build, run:

$ make clean

You can use dfthread in your project by linking to the generated dfthread library plus any platform specific threading library, such as pthreads on POSIX, and including the dfthread.h and dfthreaddef.h headers as needed.

License

MIT, see LICENSE file for details.