#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
int print_ntimes(char *str)
{
sleep(1);
printf("%s\n", str);
return 0;
}
void *th_fun(void* arg)
{
int n=3;
while(n--)
{
print_ntimes("hello wxp\n");
}
}
int main(void)
{
pthread_t tid;//线程tid
int err, detachstate, i=1;
pthread_attr_t attr;//线程属性结构体
size_t stacksize;//线程栈大小
void *stackaddr;//线程起始地址
pthread_attr_init(&attr);//初始化线程属性
pthread_attr_getstack(&attr, &stackaddr, &stacksize);//初始化线程属性后,获取线程栈的起始地址和大小
printf("stackaddr=%p\n", stackaddr);
printf("stacksize=%x\n",(int)stacksize);
pthread_attr_getdetachstate(&attr, &detachstate);//初始化线程属性后,获取线程的状态
if(detachstate==PTHREAD_CREATE_DETACHED)
{
printf("pthread detached\n");
}
else if(detachstate==PTHREAD_CREATE_JOINABLE)
{
printf("pthread join\n");
}
else
{
printf("pthread unknown");
}
/*设置线程的分离属性*/
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
while(1){
/*在堆上申请内存,指定线程栈的起始地址和大小*/
stackaddr=malloc(SIZE);
if(stackaddr==NULL)
{
perror("malloc");
exit(1);
}
stacksize = SIZE;
//设置线程的起始地址和大小
pthread_attr_setstack(&attr, stackaddr, stacksize);
//创建线程
err = pthread_create(&tid, &attr, th_fun, NULL);
if(err != 0)
{
printf("%s\n", strerror(err));
exit(1);
}
printf("%d\n", i++);
}
//销毁线程属性结构体
pthread_attr_destroy(&attr);
return 0;
}
线程属性设置简例
最新推荐文章于 2024-01-18 18:33:12 发布