st_thread_join协程间通信介绍—StateThreads基础函数介绍
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
在进行多线程编程的时候,我们通常会使用 pthread_join()
函数来等待一个线程的结束。StateThread 也为我们提供了一个 st_thread_join() 函数来等待某个协程的结束。
下面就用一个小例子 join.c
来演示一下 st_thread_join()
函数的用法。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "st.h"
int do_something(void *arg) {
st_utime_t time_now = st_utime();
printf("do_something %lld \r\n", time_now);
return 8;
}
int main(int argc, char *argv[]) {
if (st_init() < 0) {
perror("st_init");
exit(1);
}
_st_thread_t *pid = st_thread_create((void *) do_something, NULL, 1, 0);
if (pid == NULL) {
perror("st_thread_create");
exit(1);
}
void *return_num;
st_thread_join(pid, &return_num);
printf("get thread num %d\r\n", return_num);
st_thread_exit(NULL);
/* 不会运行到这里 */
return 1;
}
上面的代码重点是 st_thread_create()
创建协程的时候,必须把 joinable
参数设置为 1,这样这个协程才是可以 join
的。
请把 join.c
放到 example
目录下。然后参考前面的文章修改一下 makefile
的编译规则。
程序的运行效果如下:
关于 st_thread_join()
的内部实现分析,请阅读《st_thread_join协程间通信原理》