当前位置: 技术问答>linux和unix
POSIX:pthread_create上下文
来源: 互联网 发布时间:2015-12-26
本文导语: 逻辑上,thread创建成功后,会拷贝原始thread的堆栈信息吗? ThreadA -+- ThreadA | |(pthread_create) | +- ThreadA1 ThreadA1会具有ThreadA的堆栈信息吗? 从下面的例子来看,...
逻辑上,thread创建成功后,会拷贝原始thread的堆栈信息吗?
ThreadA -+- ThreadA
|
|(pthread_create)
|
+- ThreadA1
ThreadA1会具有ThreadA的堆栈信息吗?
从下面的例子来看,答案似乎是不。
/*
* Complier & OS
* gcc on SLES 9.3
*/
#include
#include
#include
#include
#define TH_COUNT 10
//#define pthread_yield() sleep(1)
int exit_flag = 0;
int indicator = 0;
pthread_mutex_t exit_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t print_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t indicator_lock = PTHREAD_MUTEX_INITIALIZER;
void printf_r(const char *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
pthread_mutex_lock(&print_lock);
vprintf(fmt, arg_ptr);
pthread_mutex_unlock(&print_lock);
}
void *th_main(void *arg)
{
int cont = 0;
while( cont == 0 )
{
pthread_mutex_lock(&indicator_lock);
cont = indicator;
pthread_mutex_unlock(&indicator_lock);
pthread_yield();
}
pthread_mutex_lock(&exit_lock);
exit_flag++;
pthread_mutex_unlock(&exit_lock);
printf_r( "arg=%p,*arg=%dn", arg, *((int*)arg) );
pthread_mutex_lock(&exit_lock);
exit_flag--;
pthread_mutex_unlock(&exit_lock);
return NULL;
}
int run(void)
{
int i;
pthread_t th_list[TH_COUNT];
int value = 1024;
// int *arg=(int*)malloc(sizeof(int));
int *arg=NULL;
// *arg=value;
arg=&value;
for( i = 0; i
ThreadA -+- ThreadA
|
|(pthread_create)
|
+- ThreadA1
ThreadA1会具有ThreadA的堆栈信息吗?
从下面的例子来看,答案似乎是不。
/*
* Complier & OS
* gcc on SLES 9.3
*/
#include
#include
#include
#include
#define TH_COUNT 10
//#define pthread_yield() sleep(1)
int exit_flag = 0;
int indicator = 0;
pthread_mutex_t exit_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t print_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t indicator_lock = PTHREAD_MUTEX_INITIALIZER;
void printf_r(const char *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
pthread_mutex_lock(&print_lock);
vprintf(fmt, arg_ptr);
pthread_mutex_unlock(&print_lock);
}
void *th_main(void *arg)
{
int cont = 0;
while( cont == 0 )
{
pthread_mutex_lock(&indicator_lock);
cont = indicator;
pthread_mutex_unlock(&indicator_lock);
pthread_yield();
}
pthread_mutex_lock(&exit_lock);
exit_flag++;
pthread_mutex_unlock(&exit_lock);
printf_r( "arg=%p,*arg=%dn", arg, *((int*)arg) );
pthread_mutex_lock(&exit_lock);
exit_flag--;
pthread_mutex_unlock(&exit_lock);
return NULL;
}
int run(void)
{
int i;
pthread_t th_list[TH_COUNT];
int value = 1024;
// int *arg=(int*)malloc(sizeof(int));
int *arg=NULL;
// *arg=value;
arg=&value;
for( i = 0; i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!