linux 下,簡單的多線程應用。
編譯的時候,因爲引用了pthread庫,所以要加-lpthread
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
pthread_t ntid;
void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid = getpid(); //get process id
tid = pthread_self(); //get thread id
printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,
(unsigned long)tid, (unsigned long)tid);
}
void *thr_fn1(void *arg)
{
printf("thread 1 exiting\n");
printids("thread1");
sleep(3);
pthread_exit((void *)1);
}
void * thr_fn2(void *arg)
{
printf("thread 2 exiting\n");
sleep(5);
pthread_exit((void *)2);
}
int main(void)
{
int err;
pthread_t tid1, tid2;
void *tret;
/* create thread 1 */
err = pthread_create(&tid1, NULL, thr_fn1, NULL);
if (err != 0) {
printf("can't create thread 1\n");
}
/* create thread 2*/
err = pthread_create(&tid2, NULL, thr_fn2, NULL);
if (err != 0) {
printf("can't create thread 2\n");
}
/*block until thread1 exit*/
err = pthread_join(tid1, &tret);
if (err != 0) {
printf("can't join with thread 1\n");
}
printf("thread 1 exit code %ld\n", (long)tret);
/*block until thread2 exit*/
err = pthread_join(tid2, &tret);
if (err != 0) {
printf("can't join with thread 1\n");
}
printf("thread 2 exit code %ld\n", (long)tret);
exit(0);
}