#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char globe_buffer[100]
void *read_buffer_thread(void *arg) //这里先声明一下读缓存的线程,具体实现写在后面了
int main()
{
int res,i
pthread_t read_thread
for(i=0i<20i++)
globe_buffer[i]=i
printf("\nTest thread : write buffer finish\n")
sleep(3)\\这里的3秒是多余,可以不要。
res = pthread_create(&read_thread, NULL, read_buffer_thread, NULL)
if (res != 0)
{
printf("Read Thread creat Error!")
exit(0)
}
sleep(1)
printf("waiting for read thread to finish...\n")
res = pthread_join(read_thread, NULL)
if (res != 0)
{
printf("read thread join failed!\n")
exit(0)
}
printf("read thread test OK, have fun!! exit ByeBye\n")
return 0
}
void *read_buffer_thread(void *arg)
{
int i,x
printf("Read buffer thread read data : \n")
for(i=0i<20i++)
{
x=globe_buffer[i]
printf("%d ",x)
globe_buffer[i]=0//清空
}
printf("\nread over\n")
}
---------------------------------------------------------------------------------
以上程序编译:
gcc -D_REENTRANT test.c -o test.o –lpthread
运行这个程序:
$ ./test.o:
__thread 是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。
__thread 变量 每一个线程有一份独立实体 ,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。
只能修饰 POD 类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可以复原)
不能修饰 class 类型,因为无法自动调用构造函数和析构函数,可以用于修饰全局变量,函数内的静态变量,不能修饰函数的局部变量或者class的普通成员变量,且__thread变量值只能初始化为编译期常量,即编译期间就能确定值。
场景说明:每个线程有一些需要保存的上下文信息,即可使用 __thread 变量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)