//线程的创建
#include
#include
#include
void* thread_run(void* arg)//传入线程创建的函数
{
while(1)
{
printf("I am thread 1\n");
sleep(2);
}
}
int main()
{
pthread_t tid;//无符号长整型
//新线程去执行thread_run函数
int ret = pthread_create(&tid, NULL, thread_run, "thread 1");//这里给thread_run传入的参数为一个字符串
//这之后的是主线程在执行
while(1)
{
printf("I am main thread\n");
sleep(1);
}
return 0;
}
(5)测试代码:
//线程的等待
#include
#include
#include
void* thread_run(void* arg)//传入线程创建的函数
{
//pthread_self函数用于获得当前线程id
printf("I am %s, id is %lu\n", (char*)arg, pthread_self());
sleep(2);
return ((void*)132);
}
int main()
{
pthread_t tid;//无符号长整型
//新线程去执行thread_run函数
int ret = pthread_create(&tid, NULL, thread_run, "thread 1");//这里给thread_run传入的参数为一个字符串
//这之后的是主线程在执行
printf("new: thread id id %lu\n", tid);
printf("main: thread id id %lu\n", pthread_self());
void* ptr;
//这里阻塞式等待
pthread_join(tid, &ptr);
printf("main thread run, new thread ret: %d\n", (int)ptr);
return 0;
}
//所有线程的pid都是进程的pid,均相同
#include
#include
#include
void* thread_run(void* arg)//传入线程创建的函数
{
const char* msg = (const char*)arg;
printf("%s: tid:%#x, pid:%d\n", msg, pthread_self(), getpid());
sleep(3);
//pthread_detach(pthread_self());//自己分离自己
//只要线程异常,不论是否分离,都会影响进程
int *a;
*a = 10;
}
int main()
{
pthread_t tid;//无符号长整型
pthread_create(&tid, NULL, thread_run, "thread 1");
//分离后再join,就会出错
pthread_detach(tid);
while(1)
{
printf("I am main thread\n");
sleep(1);
}
////sleep(2);
//int ret = pthread_join(tid, NULL);//不关心线程退出信息
//printf("ret: %d\n", ret);
return 0;
}
//线程的终止
#include
#include
#include
#include
void* thread_run(void* arg)//传入线程创建的函数
{
//pthread_self函数用于获得当前线程id
printf("I am %s, id is %lu\n", (char*)arg, pthread_self());
pthread_exit((void*)99);
//exit(123);//exit用于进程退出
}
int main()
{
pthread_t tid;//无符号长整型
//新线程去执行thread_run函数
int ret = pthread_create(&tid, NULL, thread_run, "thread 1");//这里给thread_run传入的参数为一个字符串
//这之后的是主线程在执行
void* ptr;
//这里阻塞式等待,获得线程退出信息
pthread_join(tid, &ptr);
printf("main thread run, new thread ret: %d\n", (int)ptr);
return 12;
}
//线程的终止
#include
#include
#include
#include
void* thread_run(void* arg)//传入线程创建的函数
{
//pthread_self函数用于获得当前线程id
printf("I am %s, id is %lu\n", (char*)arg, pthread_self());
pthread_cancel(pthread_self());//线程取消自己
//sleep(3);
//pthread_exit((void*)99);
//exit(123);//exit用于进程退出
}
int main()
{
pthread_t tid;//无符号长整型
//新线程去执行thread_run函数
int ret = pthread_create(&tid, NULL, thread_run, "thread 1");//这里给thread_run传入的参数为一个字符串
//这之后的是主线程在执行
//sleep(2);
//pthread_cancel(tid);//取消线程
void* ptr;
//这里阻塞式等待,获得线程退出信息
pthread_join(tid, &ptr);
printf("main thread run, new thread ret: %d\n", (int)ptr);
return 12;
}