mirror of
https://github.com/Pithikos/C-Thread-Pool
synced 2024-11-21 21:21:23 +03:00
Add API function to get number of working threads
This commit is contained in:
parent
bc95c0ed47
commit
48ae25d35a
@ -50,3 +50,4 @@ For a deeper look into the documentation check in the [thpool.h](https://github.
|
|||||||
| ***thpool_destroy(thpool)*** | This will destroy the threadpool. If jobs are currently being executed, then it will wait for them to finish. |
|
| ***thpool_destroy(thpool)*** | This will destroy the threadpool. If jobs are currently being executed, then it will wait for them to finish. |
|
||||||
| ***thpool_pause(thpool)*** | All threads in the threadpool will pause no matter if they are idle or executing work. |
|
| ***thpool_pause(thpool)*** | All threads in the threadpool will pause no matter if they are idle or executing work. |
|
||||||
| ***thpool_resume(thpool)*** | If the threadpool is paused, then all threads will resume from where they were. |
|
| ***thpool_resume(thpool)*** | If the threadpool is paused, then all threads will resume from where they were. |
|
||||||
|
| ***thpool_num_threads_working(thpool)*** | Will return the number of currently working threads. |
|
||||||
|
33
tests/api.sh
Executable file
33
tests/api.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# This file has several tests to check that the API
|
||||||
|
# works to an acceptable standard.
|
||||||
|
#
|
||||||
|
|
||||||
|
. funcs.sh
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------- Tests -----------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
function test_api {
|
||||||
|
echo "Testing API calls.."
|
||||||
|
compile src/api.c
|
||||||
|
output=`./test`
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
err "$output" "$output"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
test_api
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo "No API errors"
|
@ -9,6 +9,7 @@
|
|||||||
# ---------------------------- Tests -----------------------------------
|
# ---------------------------- Tests -----------------------------------
|
||||||
|
|
||||||
. threadpool.sh
|
. threadpool.sh
|
||||||
|
. api.sh
|
||||||
. pause_resume.sh
|
. pause_resume.sh
|
||||||
. heap_stack_garbage.sh
|
. heap_stack_garbage.sh
|
||||||
. memleaks.sh
|
. memleaks.sh
|
||||||
|
48
tests/src/api.c
Normal file
48
tests/src/api.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "../../thpool.h"
|
||||||
|
|
||||||
|
|
||||||
|
void sleep_2_secs(){
|
||||||
|
sleep(2);
|
||||||
|
puts("SLEPT");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]){
|
||||||
|
|
||||||
|
int num = 0;
|
||||||
|
threadpool thpool;
|
||||||
|
|
||||||
|
/* Test if we can get the current number of working threads */
|
||||||
|
thpool = thpool_init(10);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
sleep(1);
|
||||||
|
num = thpool_num_threads_working(thpool);
|
||||||
|
if (thpool_num_threads_working(thpool) != 4) {
|
||||||
|
printf("Expected 4 threads working, got %d", num);
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Test (same as above) */
|
||||||
|
thpool = thpool_init(5);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
thpool_add_work(thpool, (void*)sleep_2_secs, NULL);
|
||||||
|
sleep(1);
|
||||||
|
num = thpool_num_threads_working(thpool);
|
||||||
|
if (num != 2) {
|
||||||
|
printf("Expected 2 threads working, got %d", num);
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// thpool_destroy(thpool);
|
||||||
|
|
||||||
|
// sleep(1); // Sometimes main exits before thpool_destroy finished 100%
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
5
thpool.c
5
thpool.c
@ -253,6 +253,11 @@ void thpool_resume(thpool_* thpool_p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int thpool_num_threads_working(thpool_* thpool_p){
|
||||||
|
return thpool_p->num_threads_working;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
22
thpool.h
22
thpool.h
@ -158,6 +158,28 @@ void thpool_resume(threadpool);
|
|||||||
*/
|
*/
|
||||||
void thpool_destroy(threadpool);
|
void thpool_destroy(threadpool);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Show currently working threads
|
||||||
|
*
|
||||||
|
* Working threads are the threads that are performing work (not idle).
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* int main() {
|
||||||
|
* threadpool thpool1 = thpool_init(2);
|
||||||
|
* threadpool thpool2 = thpool_init(2);
|
||||||
|
* ..
|
||||||
|
* printf("Working threads: %d\n", thpool_num_threads_working(thpool1));
|
||||||
|
* ..
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @param threadpool the threadpool of interest
|
||||||
|
* @return integer number of threads working
|
||||||
|
*/
|
||||||
|
int thpool_num_threads_working(threadpool);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user