文章还没写完呢
c/c++线程的使用
编译-l指定动态链接库pthread
1 | gcc xxx.c -lpthread -o xxx |
1.线程创建
pthread_t是long类型的线程id
pthread_create时callback调用子线程执行的函数,第四个参数是callback传入的void* arg
sleep让子线程执行完再挂断主线程
1 |
|
2.线程退出
主线程退出,子线程变主,回收空间
1 |
|
3.线程回收
join会让主线程阻塞
接受个Test的struct作为资源
直接在子线程开struct Test t会开在栈空间,回收后释放了,主线程肯定拿不到这个资源
要么:struct Test t开在全局变量,join后拿到Test,然后强转下struct Test* pt = (struct Test*)ptr;
要么:在主线程里开struct Test t,然后pthread_join(tid, &ptr)给子线程,子线程在arg拿到,也要强转下struct Test* t = (struct Test*)arg
1 |
|
4.线程分离
让主线程退出后不会释放子线程的资源
这里子线程创建后和主线程分离,子线程死后由内核调度回收
1 |
|
5.其他线程函数
pthread_cancel退出子线程,但是会在系统调用之后(printf就是)
1 |
|
c/c++线程的同步和互斥锁
不同步
很明显这没有同步,最后不是100
1 |
|
互斥锁
锁:状态(锁/没锁);加锁信息(线程id)
1 |
|