论坛首页 编程语言技术论坛

C: Linux C 编程 - 线程属性

浏览 297 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2020-09-22  

线程属性

pthread_attr_t

 

pthread_attr_init

函数原型

int pthread_attr_init(pthread_attr_t *attr);

 

pthread_attr_destroy

函数原型

int pthread_attr_destroy(pthread_attr_t *attr);

 

获取线程属性

pthread_getattr_np

函数原型

int pthread_getattr_np(pthread_t thread, pthread_attr_t *attr);

 

线程栈

 

pthread_attr_getstack

函数原型

int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize);

 

pthread_attr_setstack

函数原型

int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);

 

线程栈大小

 

pthread_attr_getstacksize

函数原型

int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);

 

pthread_attr_setstacksize

函数原型

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

 

线程栈地址

 

pthread_attr_getstackaddr

函数原型

int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr);

 

pthread_attr_setstackaddr

函数原型

int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);

 

线程栈保护区域大小

 

pthread_attr_getguardsize

函数原型

int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);

 

pthread_attr_setguardsize

函数原型

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

 

创建线程时指定线程属性

 

#include<stdio.h>
#include<pthread.h>

void* start_routine(void *arg)
{
  char *name = (char *) (arg);

  printf("thread %s called.\n", name);
  return NULL;
}

int main()
{
  pthread_t pthread;
  pthread_attr_t attr;

  if (pthread_attr_init(&attr))
  {
    return 1;
  }

  pthread_create(&pthread, &attr, start_routine, "#1");

  pthread_attr_destroy(&attr);
  return 0;
}
获取线程信息
#include<stdio.h>
#include<pthread.h>

void* start_routine(void *arg)
{
  pthread_t pthread = pthread_self();
  pthread_attr_t attr;

  void *stack_addr;
  size_t stack_size;

  char *name = (char *) (arg);

  if (pthread_getattr_np(pthread, &attr))
  {
    return NULL;
  }

  if (pthread_attr_getstack(&attr, &stack_addr, &stack_size))
  {
    return NULL;
  }

  printf("thread: stack addr=%p.\n", stack_addr);
  printf("thread: stack size=%d.\n", stack_size);

  printf("thread %s called.\n", name);
  return NULL;
}

int main()
{
  pthread_t pthread;
  pthread_attr_t attr;
  int *pthread_ret = NULL;

  if (pthread_attr_init(&attr))
  {
    return 1;
  }

  pthread_create(&pthread, &attr, start_routine, "#1");

  if (pthread_join(pthread, (void **) &pthread_ret))
  {
    return 1;
  }

  pthread_attr_destroy(&attr);
  return 0;
}
 
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics