• create thread的时候发生core dump


     1 #include <stdio.h>
     2 #include <unistd.h>
     3 #include <stdlib.h>
     4 #include <pthread.h>
     5 #define THREAD_COUNT 12
     6 
     7 void show_thread_policy(int threadno){
     8         int policy;
     9         struct sched_param param;
    10         pthread_getschedparam(pthread_self(), &policy, &param);
    11         switch(policy){
    12         case SCHED_OTHER:
    13                 printf("SCHED_OTHER %d
    ", threadno);
    14                 break;
    15         case SCHED_RR:
    16                 printf("SCHED_RR %d
    ", threadno);
    17                 break;
    18         case SCHED_FIFO:
    19                 printf("SCHED_FIFO %d
    ", threadno);
    20                 break;
    21         default:
    22                 printf("UNKNOWN
    ");
    23         }
    24 }
    25 
    26 void *thread(void *arg){
    27         int i,j;
    28         long threadno = (long)arg;
    29         printf("thread %d start 
    ", threadno);
    30         printf("thread ------------------------------0
    ");
    31         sleep(1);
    32         printf("---------1---------------
    ");
    33         show_thread_policy(threadno);
    34         printf("---------2---------------
    ");
    35         for(int i=0;i<10;i++){
    36                 printf("---------3---------------
    ");
    37                 for(j=0;j<10000000;j++){
    38 
    39                 }
    40 
    41                 printf("thread %d
    ", threadno);
    42         }
    43 
    44         printf("thread %d exit
    ", threadno);
    45         return NULL;
    46 }
    47 
    48 int main(int argc, char *argv[]){
    49         long i;
    50         pthread_attr_t attr[THREAD_COUNT];
    51         pthread_t pth[THREAD_COUNT];
    52         struct sched_param param;
    53         for(i=0;i<THREAD_COUNT;++i){
    54                 pthread_attr_init(&attr[i]);
    55                 for(i=0;i<THREAD_COUNT/2;++i){
    56                         param.sched_priority = 10;
    57                         pthread_attr_setschedpolicy(&attr[i], SCHED_FIFO);
    58                         pthread_attr_setschedparam(&attr[i], &param);
    59                         pthread_attr_setinheritsched(&attr[i], PTHREAD_EXPLICIT_SCHED);
    60                 }
    61 
    62                 for(i=THREAD_COUNT/2;i<THREAD_COUNT;++i){
    63                         param.sched_priority = 20;
    64                         pthread_attr_setschedpolicy(&attr[i], SCHED_FIFO);
    65                         pthread_attr_setschedparam(&attr[i], &param);
    66                         pthread_attr_setinheritsched(&attr[i], PTHREAD_EXPLICIT_SCHED);
    67                 }
    68 
    69                 for(i=0;i<THREAD_COUNT;++i){
    70                         pthread_create(&pth[i], &attr[i], thread, (void *)i);
    71                         printf("--------------------create thread %d------------
    ", i);
    72                 }
    73 
    74                 for(i=0;i<THREAD_COUNT;++i){
    75                         pthread_join(pth[i], NULL);
    76                 }
    77 
    78                 for(i=0;i<THREAD_COUNT;++i){
    79                         pthread_attr_destroy(&attr[i]);
    80                 }
    81 
    82                 return 0;
    83         }
    84 }

    编译之后执行的结果如下:

    [root@Alston C++]# ./thread_2.exe
    thread 0 start
    thread ------------------------------0
    --------------------create thread 0------------
    --------------------create thread 1------------
    --------------------create thread 2------------
    --------------------create thread 3------------
    Segmentation fault (core dumped)

    目前还没调查出来原因。

  • 相关阅读:
    Source Insight新建工程文件
    移植3.4.2内核之韦东山笔记
    移植最新u-boot(裁剪和修改默认参数)
    C++与C语言在结构体上的区别
    VIP之Switch
    VIP之CSC
    VIP之Scaler
    VIP之FrameBuffer
    VIP之MixerII
    VIP之Clipper
  • 原文地址:https://www.cnblogs.com/javametro/p/3438007.html
Copyright © 2020-2023  润新知