当前位置: 技术问答>linux和unix
pthread_create所创建的线程中的static变量
来源: 互联网 发布时间:2015-05-21
本文导语: 我在一个初始化函数中调用了pthread_create。 void myinit(int port) { ... pthread_create(NULL, NULL, thread_recv_task, &type); ... } 在thread_recv_task中定义了一个static类型的buf,用来接收消息。 void *thread_recv_task(void *pport)...
我在一个初始化函数中调用了pthread_create。
void myinit(int port)
{
...
pthread_create(NULL, NULL, thread_recv_task, &type);
...
}
在thread_recv_task中定义了一个static类型的buf,用来接收消息。
void *thread_recv_task(void *pport)
{
static char *buf = NULL;
if(buf == NULL)
buf = (char *)malloc(1024);
...
recvmsg(sk, buf, 1024, ...);
...
}
现在我调用了myinit函数两次(参数port不同),也就创建了两个线程,我调试程序的时候,发现在两个线程中的buf的地址是相同的,请问这样是否会产生什么问题?
void myinit(int port)
{
...
pthread_create(NULL, NULL, thread_recv_task, &type);
...
}
在thread_recv_task中定义了一个static类型的buf,用来接收消息。
void *thread_recv_task(void *pport)
{
static char *buf = NULL;
if(buf == NULL)
buf = (char *)malloc(1024);
...
recvmsg(sk, buf, 1024, ...);
...
}
现在我调用了myinit函数两次(参数port不同),也就创建了两个线程,我调试程序的时候,发现在两个线程中的buf的地址是相同的,请问这样是否会产生什么问题?
|
一条线程写入数据后设置mutex,数据被读出后再取消互斥。
否则数据很可能被冲掉。
不知道你为什么要采用static变量的方式,感觉不太好,
是否可以考虑使用某种方式的IPC来代替?
否则数据很可能被冲掉。
不知道你为什么要采用static变量的方式,感觉不太好,
是否可以考虑使用某种方式的IPC来代替?
|
static变量在多线程中需要同步的。
某些函数如localtime不是多线程安全,原因就是使用了static变量。
某些函数如localtime不是多线程安全,原因就是使用了static变量。
|
应该看看书,看看static变量的概念