Comments (1)
@Jamesluo1
If there are more jobs waiting in the queue, the semaphore value should be always 1
.
static void jobqueue_push(jobqueue *jobqueue_p, struct job *newjob)
{
// ...
bsem_post(jobqueue_p->has_jobs); // set 1 to semaphore value and signal
// ...
}
When one of the threads finish the work, it won't wait for a condition variable but continues to pull a job from the queue and execute it. In the meantime, the semaphore value will be set to 1
again.
static void bsem_wait(bsem *bsem_p)
{
pthread_mutex_lock(&bsem_p->mutex);
while (bsem_p->v != 1) // 1. skip
{
pthread_cond_wait(&bsem_p->cond, &bsem_p->mutex);
}
bsem_p->v = 0; // 2. reset 0 to semaphore value
pthread_mutex_unlock(&bsem_p->mutex);
}
static struct job * jobqueue_pull(jobqueue *jobqueue_p)
{
// ...
/* more than one job in queue -> post it */
bsem_post(jobqueue_p->has_jobs); // 3. set 1 again
// ...
}
from c-thread-pool.
Related Issues (20)
- If a child thread holding a mutex is terminated by "thpool_destroy(thpool)", what will happen to the mutex?
- example.c: fix a warning HOT 1
- Support for a priority queue for the jobqueue.
- support to zephyr RTOS HOT 1
- Can I pass multiple parameters to the thpool_add_work() method? HOT 2
- Why is `threads_keepalive` a global variable? HOT 1
- why do you define bsem *has_jobs; ? HOT 1
- When a thread is in an endless loop, can it not exit and be destroyed? HOT 1
- unexcpected output HOT 1
- Reinitialization of mutex and cond in bsem_reset is a bug
- Why don't threadpool lock num_threads_working? HOT 1
- Does not improve runtime while using this threadpool implementation
- Is it possible to wait for a specific task?
- Doesn't release memory until job queue is empty? HOT 1
- thpool.c has leftovers after some merge HOT 1
- question about threads_keepalive variable. HOT 1
- 'SIGUSR1' undeclared HOT 1
- Errors when compiling with C++
- Any question weclomed in https://github.com/52coder/C-Thread-Pool
- The execution result seems to be something wrong while I use the Thread pool? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from c-thread-pool.