Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <setjmp.h>
- #include <unistd.h>
- #include <pthread.h>
- /*Async style call example in C*/
- // Used for threads NOTE the starting value is zero.
- static int TOTAL = 0;
- // Used for async style return
- static jmp_buf ENVBUF;
- // The function a thread is invoked with.
- void* threadJob(void *vargp)
- {
- sleep(4);
- puts("Done sleeping"); // This statement doesn't get called, as the call is async.
- TOTAL += 300;
- return NULL;
- }
- //This function orchestrates the workers
- void callWorkers(void)
- {
- pthread_t worker1;
- pthread_t worker2;
- // Starts the workers,
- pthread_create(&worker1, NULL, threadJob, NULL);
- pthread_create(&worker2, NULL, threadJob, NULL);
- // jumps out of the current stack frame, hence not waiting for the threads to finish.
- longjmp(ENVBUF, 1);
- }
- int main(void) {
- pthread_t worker;
- if(setjmp(ENVBUF)) // This only runs after longjmp is called.
- {
- printf("async calls commenced, total is still %d\n", TOTAL);
- exit(0);
- }
- else
- {
- printf("Calling worker threads, total is now %d\n", TOTAL);
- callWorkers();
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment