C Linux 多线程入门

Posted lw007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Linux 多线程入门相关的知识,希望对你有一定的参考价值。

C Linux 多线程入门

×××

入门示例

????启动和停止直接使用接口即可,暂停和恢复需要自己定义,大体的代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
#include <sys/time.h>

struct sigaction newact, oldact;
unsigned int unslept;

// 自定义信号处理
void tm_sig_alrm(int signo) {
    /* nothing to do */
    sigset_t siguser1_mask, siguser2_mask,oldmask;
    sigemptyset(&siguser1_mask);
    sigemptyset(&siguser2_mask);
    sigaddset(&siguser1_mask, SIGUSR1);
    sigaddset(&siguser2_mask, SIGUSR2);

    switch (signo)
    {
        case SIGUSR1:
            pause();
            break;
        case SIGUSR2:
            break;
        default:
            return;
    }
}

// 暂停线程
int tm_thread_suspend(pthread_t tid) {
    return pthread_kill(tid, SIGUSR1);
}

// 恢复线程
int tm_thread_resume(pthread_t tid) {
    return pthread_kill(tid, SIGUSR2);
}

// 循环输出
void task() {
    int count = 0;
    while(1) {
        printf("count: %d
", count);
        sleep(1);
    }
}

int main(int argc, char const *argv[])
{
    newact.sa_handler = tm_sig_alrm; //注册了 SIGALRM 信号的处理函数 sig_alrm
    sigemptyset(&newact.sa_mask);
    newact.sa_flags = 0;
    sigaction(SIGUSR1, &newact, &oldact);
    sigaction(SIGUSR2, &newact, &oldact);

    pthread_t threadId;
    // 启动线程
    pthread_create(&threadId, NULL, task, NULL);
    sleep(10);
    // 暂停线程
    tm_thread_suspend(threadId);
    sleep(10);
    // 恢复线程
    tm_thread_resume(threadId);
    sleep(10);
    // 停止线程
    pthread_cancel(threadId);

    return 0;
}

以上是关于C Linux 多线程入门的主要内容,如果未能解决你的问题,请参考以下文章

Linux并行计算多线程入门程序(POSIX线程并行)

c++11多线程入门<学习记录;

Java多线程程序设计初步入门

Linux入门多线程(线程概念生产者消费者模型消息队列线程池)万字解说

java基础入门-多线程同步浅析-以银行转账为样例

20160226.CCPP体系详解(0036天)