Linux线程基本使用代码示例

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_func(void* param)
{
    const char* p = (const char*)param;
    pid_t pid = 0;
    pthread_t tid = 0;

    pid = getpid();
    tid = pthread_self();
    printf("%s -> %8u %8u\n", p, (unsigned int)pid, (unsigned int)tid);
}
void* thread_wait_cancel(void* p)
{
    printf("thread wait cancel -> i'm waitting for cancel\n");
    sleep(10000);
    printf("if u saw me, there got be something wrong\n");
}
int main(int argc, char* argv[])
{
    pthread_t tid = 0;
    pthread_create(&tid, NULL, thread_func, (void *)"sub  thread");

    pthread_t tid_cancel = 0;
    pthread_create(&tid_cancel, NULL, thread_wait_cancel, NULL);

    // wait thread tid to exit
    pthread_join(tid, NULL);

    // cancel a thread
    void* stat = 0;
    pthread_cancel(tid_cancel);
    pthread_join(tid_cancel, &stat);
    /* stat = -1 stand for PTHREAD_CANCELED */
    printf("cancel thread exit state : %d\n", stat);

    // show main thread infomation
    thread_func((void *)"main thread");
    return 0;
}

注意编译的时候需要加上选项-lpthread,因为pthread不是linu的默认库,如下所示:

gcc thr.c -lpthread
时间: 2024-11-01 17:31:54

Linux线程基本使用代码示例的相关文章

Linux线程基本使用代码演示样例

#include <pthread.h> #include <stdio.h> #include <unistd.h> void* thread_func(void* param) { const char* p = (const char*)param; pid_t pid = 0; pthread_t tid = 0; pid = getpid(); tid = pthread_self(); printf("%s -> %8u %8u\n"

Linux线程编程之信号处理

前言 Linux多线程环境中的信号处理不同于进程的信号处理.一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理. 本文首先介绍信号处理在进程中和线程间的不同,然后描述相应的线程库函数,在此基础上给出一组示例代码,以讨论线程编程中信号处理的细节和注意事项.文中涉及的代码运行环境如下: 本文通过sigwait()调用来“等待”信号,而通过signal()/sigaction()注册的信号处理函数来“捕获”信号,以体现其同步和异步的区别. 一  概念

java 线程、线程池基本应用示例代码回顾

package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class LiftOff implements Runnable { protected int countDown=10; private static int taskCount=0; private final int id=taskCount++; public LiftOff(){} public LiftOff(int countDown) { thi

C#控制台线程计时器代码示例

在C#中提供了三种类型的计时器:1.基于 Windows 的标准计时器(System.Windows.Forms.Timer)2.基于服务器的计时器(System.Timers.Timer)3.线程计时器(System.Threading.Timer)一.基于 Windows 的标准计时器(System.Windows.Forms.Timer)首先注意一点就是:Windows 计时器是为单线程环境设计的此计时器从Visual Basic 1.0 版起就存在于该产品中,并且基本上未做改动这个计时器

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

SFTP客户端代码示例

SFTP客户端代码示例 环境:libssh2 1.4.3.zlib-1.2.8.openssl-1.0.1g Author: Kagula 最后更新日期:2014-5-18 从http://www.libssh2.org/下载libssh2-1.4.3.tar.gz文件,解压后打开libssh2.dsw文件升级项目到VisualStudio 2013,里面有两个项目,只要编译libssh2项目就可以了.编译前需要添加zlib和openssl的头文件和库文件链接位置,如果编译libssh2提示找不

Linux 线程 条件变量

下面是一个多线程,生产者消费者问题,一个队列放暂存的数据: 1 #include <iostream> 2 #include <queue> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <pthread.h> 6 7 using std::cout; 8 using std::endl; 9 using std::queue; 10 11 #define N 100 12 #def

Android Java使用JavaMail API发送和接收邮件的代码示例

JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的jar包(请下载javamail的源文件,官方下载页:http://www.oracle.com/technetwork/java/javamail/index-138643.html):mailapi.jar.定义了收发邮件所使用到的接口API:smtp.jar.包含了发送邮件使用到的类:pop3.