#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
// Let us create a global variable to change it in threads
int g = 0;
// The function to be executed by all threads
void *myThreadFun(void *vargp)
{
// Store the value argument passed to this thread
int *myid = (int *)vargp;
// Let us create a static variable to observe its changes
static int s = 0;
// Change static and global variables
++s; ++g;
// Print the argument, static and global variables
printf("Thread ID: %d, Static: %d, Global: %d\n", *myid
, ++s
, ++g
); }
int main()
{
int i;
pthread_t tid;
// Let us create three threads
for (i = 0; i < 3; i++)
pthread_create(&tid, NULL, myThreadFun, (void *)&tid);
pthread_exit(NULL);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgoKLy8gTGV0IHVzIGNyZWF0ZSBhIGdsb2JhbCB2YXJpYWJsZSB0byBjaGFuZ2UgaXQgaW4gdGhyZWFkcwppbnQgZyA9IDA7CgovLyBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgYWxsIHRocmVhZHMKdm9pZCAqbXlUaHJlYWRGdW4odm9pZCAqdmFyZ3ApCnsKCS8vIFN0b3JlIHRoZSB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0aHJlYWQKCWludCAqbXlpZCA9IChpbnQgKil2YXJncDsKCgkvLyBMZXQgdXMgY3JlYXRlIGEgc3RhdGljIHZhcmlhYmxlIHRvIG9ic2VydmUgaXRzIGNoYW5nZXMKCXN0YXRpYyBpbnQgcyA9IDA7CgoJLy8gQ2hhbmdlIHN0YXRpYyBhbmQgZ2xvYmFsIHZhcmlhYmxlcwoJKytzOyArK2c7CgoJLy8gUHJpbnQgdGhlIGFyZ3VtZW50LCBzdGF0aWMgYW5kIGdsb2JhbCB2YXJpYWJsZXMKCXByaW50ZigiVGhyZWFkIElEOiAlZCwgU3RhdGljOiAlZCwgR2xvYmFsOiAlZFxuIiwgKm15aWQsICsrcywgKytnKTsKfQoKaW50IG1haW4oKQp7CglpbnQgaTsKCXB0aHJlYWRfdCB0aWQ7CgoJLy8gTGV0IHVzIGNyZWF0ZSB0aHJlZSB0aHJlYWRzCglmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQoJCXB0aHJlYWRfY3JlYXRlKCZ0aWQsIE5VTEwsIG15VGhyZWFkRnVuLCAodm9pZCAqKSZ0aWQpOwoKCXB0aHJlYWRfZXhpdChOVUxMKTsKCXJldHVybiAwOwp9Cg==