#include <stdio.h> #include <stdlib.h> // Including pthread API #include <pthread.h> // global variable to share data int i; // This function will run concurrently. void* print_i(void *ptr) { while (1) { sleep(1); printf("%d\n", i); } } int main() { pthread_t t1; i = 1; int iret1 = pthread_create(&t1, NULL, print_i, NULL); while (1) { sleep(2); i = i + 1; } exit(0); //never reached. } |
1 2 2 3 3 4 4 5 5 |
#include <stdio.h> #include <stdlib.h> // Including pthread API #include <pthread.h> // This function will run concurrently. void* print_i(void *ptr) { printf("a\n"); printf("b\n"); } int main() { pthread_t t1; i = 1; int iret1 = pthread_create(&t1, NULL, print_i, NULL); printf("c\n"); } |
#include <stdio.h> #include <stdlib.h> #include <string.h> // Including pthread API #include <pthread.h> char s1[] = "abcdefg"; char s2[] = "abc"; char* c; void last_letter(char* a, int i) { sleep(i); c = NULL; sleep(i); c = a; sleep(i); // or doing some dirty heavy work while (*(c)) { c++; } printf("%c\n", *(c-1)); } // This function will run concurrently. void* aa(void *ptr) { last_letter(s2, 2); } int main() { pthread_t t1; int iret1 = pthread_create(&t1, NULL, aa, NULL); last_letter(s1, 5); exit(0); //never reached. } |
#include <stdio.h> #include <stdlib.h> #include <string.h> // Including pthread API #include <pthread.h> char s1[] = "abcdefg"; char s2[] = "abc"; pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; void print(char* a, char* b) { pthread_mutex_lock(&mutex1); printf("1: %s\n", a); sleep(1); printf("2: %s\n", b); pthread_mutex_unlock(&mutex1); } // These two functions will run concurrently. void* print_i(void *ptr) { print("I am", " in i"); } void* print_j(void *ptr) { print("I am", " in j"); } int main() { pthread_t t1, t2; int iret1 = pthread_create(&t1, NULL, print_i, NULL); int iret2 = pthread_create(&t2, NULL, print_j, NULL); while(1){} exit(0); //never reached. } |
I am in i I am in j |
I am I am int i in j |
#include <stdio.h> #include <stdlib.h> #include <string.h> // Including pthread API #include <pthread.h> pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER; // These two functions will run concurrently. void* print_i(void *ptr) { pthread_mutex_lock(&mutex1); pthread_mutex_lock(&mutex2); printf("I am in i"); pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex1); } void* print_j(void *ptr) { pthread_mutex_lock(&mutex2); pthread_mutex_lock(&mutex1); printf("I am in j"); pthread_mutex_unlock(&mutex1); pthread_mutex_unlock(&mutex2); } int main() { pthread_t t1, t2; int iret1 = pthread_create(&t1, NULL, print_i, NULL); int iret2 = pthread_create(&t2, NULL, print_j, NULL); while(1){} exit(0); //never reached. } |