Linux C多线程入门

#简介 本文仅表明我的观点。学会线程的建立、传参、释放、mutex、rwlock、mq,能够解决90%以上的多线程问题。多线程

本文中全部代码编译经过,运行正常。并发

代码运行环境:操作系统

CPU:I5-3210M,内存:12GB DDR3 1600,系统:CentOS 6.7 64位 #什么是线程线程

线程是操做系统可以进行运算调度的最小单位。它被包含在进程中,是进程中的实际运做单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中能够并行多个线程,每条线程并行执行不一样的任务。————维基百科

线程并发,多核并行。 #线程的建立和释放 ##建立和释放 问题:Linux中1个进程建立的最大线程数小于1000000。若是下列程序中的线程正常释放了,那么输出1000000,不然输出建立的线程数。下列程序中线程正常结束的是?code

A、自动释放进程

//thread.c
#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    return NULL;
}
int main(void){
    int i;
    for(i=0;i<1000000;++i){
        pthread_t thread;
        if(pthread_create(&thread,NULL,threadStart,NULL)!=0)
            break;
    }
    printf("建立线程%d个\n",i);
    return 0;
}

编译:gcc -O2 thread.c -lpthread内存

运行:./a.out B、joinit

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    return NULL;
}
int main(void){
    int i;
    for(i=0;i<1000000;++i){
        pthread_t thread;
        if(pthread_create(&thread,NULL,threadStart,NULL)!=0)
            break;
        pthread_join(thread,NULL);
    }
    printf("建立线程%d个\n",i);
    return 0;
}

C、detachio

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    return NULL;
}
int main(void){
    int i;
    for(i=0;i<1000000;++i){
        pthread_t thread;
        if(pthread_create(&thread,NULL,threadStart,NULL)!=0)
            break;
        pthread_detach(thread);
    }
    printf("建立线程%d个\n",i);
    return 0;
}

D、cancel编译

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    return NULL;
}
int main(void){
    int i;
    for(i=0;i<1000000;++i){
        pthread_t thread;
        if(pthread_create(&thread,NULL,threadStart,NULL)!=0)
            break;
        pthread_cancel(thread);
    }
    printf("建立线程%d个\n",i);
    return 0;
}

E、exit

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    pthread_exit(NULL);
    return NULL;
}
int main(void){
    int i;
    for(i=0;i<1000000;++i){
        pthread_t thread;
        if(pthread_create(&thread,NULL,threadStart,NULL)!=0)
            break;
    }   
    printf("建立线程%d个\n",i);
    return 0;
}

BC

记住Linux C线程只有两种释放方式:join和detach。 ##传参 下面线程输出0~9(顺序无关)的是? A、

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    int *pI=(int*)arg;
    printf("%d\n",*pI);
    return NULL;
}
int main(void){
    int i;
    pthread_t thread[10];
    for(i=0;i<10;++i)
    {
        pthread_create(&thread[i],NULL,threadStart,&i);
        pthread_join(thread[i],NULL);
    }
    return 0;
}

B、

#include <pthread.h>
#include <stdio.h>
void *threadStart(void *arg){
    int *pI=(int*)arg;
    printf("%d\n",*pI);
    return NULL;
}
int main(void){
    int i;
    pthread_t thread[10];
    for(i=0;i<10;++i)
        pthread_create(&thread[i],NULL,threadStart,&i);
    for(i=0;i<10;++i)
        pthread_join(thread[i],NULL);
    return 0;
}

C、

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *threadStart(void *arg){
    int *pI=(int*)arg;
    printf("%d\n",*pI);
    free(pI);
    return NULL;
}
int main(void){
    int i;
    pthread_t thread[10];
    for(i=0;i<10;++i){
        int *pI=(int*)malloc(sizeof(int));
        *pI=i;
        pthread_create(&thread[i],NULL,threadStart,pI);
    }
    for(i=0;i<10;++i)
        pthread_join(thread[i],NULL);
    return 0;
}

D、

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void *threadStart(void *arg){
    int *pI=(int*)arg;
    printf("%d\n",*pI);
    free(pI);
    return NULL;
}
int main(void){
    int i;
    pthread_t thread[10];
    for(i=0;i<10;++i){
        int *pI=(int*)malloc(sizeof(int));
        *pI=i;
        pthread_create(&thread[i],NULL,threadStart,pI);
        pthread_detach(thread[i]);
    }
    usleep(1000);
    return 0;
}
相关文章
相关标签/搜索