Code Monkey home page Code Monkey logo

threadpool's Introduction

Build Status

A simple C thread pool implementation

Currently, the implementation:

  • Works with pthreads only, but API is intentionally opaque to allow other implementations (Windows for instance).
  • Starts all threads on creation of the thread pool.
  • Reserves one task for signaling the queue is full.
  • Stops and joins all worker threads on destroy.

Possible enhancements

The API contains additional unused 'flags' parameters that would allow some additional options:

  • Lazy creation of threads (easy)
  • Reduce number of threads automatically (hard)
  • Unlimited queue size (medium)
  • Kill worker threads on destroy (hard, dangerous)
  • Support Windows API (medium)
  • Reduce locking contention (medium/hard)

threadpool's People

Contributors

76716c86 avatar chichilalescu avatar jlcordeiro avatar makelearner avatar mbrossard avatar timgates42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

threadpool's Issues

Call pthread_mutex_destroy on a locked mutex

Take care that the manpage of pthread_mutex_destroy says:
"Attempting to destroy a locked mutex, or ...., results in undefined behavior."
But this is what the code is doing in threadpool_free().

unable to build

Hello,
I tried doing a make from the root directory of threadpool-master, but it gives me make errors as follows. I'm surprised because the files contain #include pthread.h and the Makefile contains -lpthread as well. How can I get it to build?

cc -lpthread tests/thrdtest.o src/threadpool.o -o tests/thrdtest src/threadpool.o: In function threadpool_create: threadpool.c:(.text+0x146): undefined reference to pthread_create src/threadpool.o: In function threadpool_destroy: threadpool.c:(.text+0x3c1): undefined reference to pthread_join collect2: ld returned 1 exit status make: *** [tests/thrdtest] Error 1

possible race condition?

Say we create 20 threads with threadpool_create() and call threadpool_add() to add a task into the task queue right away.
Is there possibility that a creating thread (in threadpool_thread()) called pthread_mutex_lock() at line 273 right after threadpool_add() called pthread_cond_signal() at line 186 so that the creating thread acquires the lock before the thread to be woken and in turn, making the pool->count a negative number?

threadpool_wait() function?

Hi,

I've just tried this thread pool and it seems to work pretty well. However, I was wondering if there is a way to wait for all threads to finish without actually freeing the memory (so that the pool is still usable).

I'm implementing a method that performs several sequential analyses (where each depends on the result of the previous) and, since it is a bit slow, I'd like to thread each analysis. So, ideally, I'd create the thread pool in the beginning, launch all tasks for the first analysis and wait for all tasks to finish. Then, I'd process the results and launch the jobs of the next analysis (and so on). Is it possible?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.