线程---创建,终止

Q: what is thread  ?

A:一个正在运行的函数----是运行函数咯----多线程共享内存空间咯

posix线程是一套标准,而不是实现

线程标识: pthread_t 类型不确定:结构体?or指针?or整型数,想啥是啥,可以自己定义咯

[email protected]:~$ ps axm   
[email protected]:~$ ps ax -L    // LWP

进程就是容器  内部装载线程

函数:

int pthread_equal(pthread_t t1, pthread_t t2);//比较两个线程是否相同;相同返回非0  否则返回0
pthread_t pthread_self(void); //返回当前线程标识;

1.创建一个线程:

 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                    void *(*start_routine) (void *), void *arg);

参数1:回填线程表示

参数2:线程的属性:常用NULL

参数3:函数指针 ----兄弟线程

参数4:兄弟线程的参数

返回值:成功返回0;失败直接返回error number

2.线程的终止:

3种方式:1)线程从启动例程返回,返回值就是线程的退出码

2)线程可以被同一进程中的其他线程取消

3)线程调用pthread_exit()函数

void pthread_exit(void *retval);//线程终止
int pthread_join(pthread_t thread, void **retval);//线程收尸 成功返回0,错误返回error number  **retval只收尸不关心状态

3.栈的清理:

     //钩子函数
       void pthread_cleanup_push(void (*routine)(void *),void *arg);
       void pthread_cleanup_pop(int execute);

eg:

#include <pthread.h>
#include <string.h>
static void *func(void *p)
{
    puts("Thead is working!");
    pthread_exit(NULL);
}

int main()
{
    pthread_t tid;
    int err;
    puts("Begin !");
    err = pthread_create(&tid,NULL,func,NULL);
    if(err)
    {
        fprintf(stderr,"%s",strerror(err));
        exit(1);
    }
    pthread_join(tid,NULL);
    puts("End !");
    exit(0);
}

OK!休息休息,下节继续!

eg:

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

void *cleanup_func(void *p)
{
    puts(p);
}

void *func(void *p)
{
    puts("Thead is working !");
    pthread_cleanup_push(cleanup_func , "cleanup:1");
    pthread_cleanup_push(cleanup_func , "cleanup:2");
    pthread_cleanup_push(cleanup_func , "cleanup:3");
    pthread_cleanup_pop(1);
    pthread_cleanup_pop(0);
    pthread_cleanup_pop(1);
    pthread_exit(NULL);
}

int main()
{
    pthread_t tid ;
    int err ;
    puts("Begin !");
    err = pthread_create(&tid,NULL,func,NULL);
    if(err)
    {
        fprintf(stderr,"%s",strerror(err));
        exit(1);
    }   

    pthread_join(tid,NULL);
    exit(0);
}

4.线程取消

int pthread_cancel(pthread_t thread);//取消线程:正在运行的线程先取消再收尸
时间: 2024-08-07 03:55:40

线程---创建,终止的相关文章

Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public class Thread implements Runnable { /* What will be run. */ private Runnable target; ...... /** * Causes this thread to begin execution; the Java Virtu

Python多线程之线程创建和终止

python主要是通过thread和threading这两个模块来实现多线程支持.python的thread模块是比较底层的模块,python的threading模块是对thread做了一些封装,可以更加方便的被使用.但是python(cpython)由于GIL的存在无法使用threading充分利用CPU资源,如果想充分发挥多核CPU的计算能力需要使用multiprocessing模块. 如果在对线程应用有较高的要求时可以考虑使用Stackless Python来完成.Stackless Py

java-多线程创建

Java 线程类也是一个 object 类,它的实例都继承自 java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Tread thread = new Thread(); thread.start(); 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了. 编写线程运行时执行的代码有两种方式:一种是创建 Thread 子类的一个实例并重写 run 方法,第二种是创建类的时候实现 Run

挂起起线程与终止线程的区别

Program1 p1 = new Program1(); Thread th = new Thread(new ThreadStart(p1.ThreadRunMethord));//创建一个新的子线程 if (th.ThreadState != ThreadState.Running)//判断子线程未开始时运行 { th.Start();//启动子线程 } Thread.Sleep(1000);//主线程休眠1秒钟 Console.WriteLine("子线程被挂起而暂停"); i

asp.net 线程创建实例

线程在ASP.NET 中的使用非常广泛,也非常重要.同样,asp.net中创建一个线程的实现方法也非常简单,只需将其声明并为其提供线程起始点处的方法委托即可实现.创建新的线程时,需要使用 Thread 类,Thread 类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数.该委托包装了调用 Start 方法时由新线程调用的方法.创建了Thread类 的对象之后,线程对象已存在并已配置,但并未创建实际的线程,只有在调用Start()方法后

linux 线程创建

一.线程的概念    进程在各个独立的地址空间中运行,进程之间共享数据需要mmap或者进程间通信机制,本节我们学习如何在一个进程的地址空间中执行多个线程.    有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了场,如实现一个图形界面的下载软件,需要和用户交互,等待和处理用户的鼠标键盘事件,另一方面又需要同时下载多个文件,等待和处理从多个网络主机发来的数据,这些任务都需要一个" 等待-处理"的循环,可以用多线程实现,一个线程专门 负责与用户交互,另外几个线程每个线程负责和

linux线程创建、取消、属性设置

创建线程: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) 参数:第一个参数为指向线程标识符的指针. 第二个参数用来设置线程属性. 第三个参数是线程运行函数的起始地址. 第四个参数是线程运行函数的参数. int pthread_join(pthread_t thread, void

线程创建_同步_通信

目录 1. 基本概念:程序.进程.线程 2. 并行和并发 3. 创建线程的两种方式 3.1 通过继承Thread方式 3.1.1 步骤: 3.1.2 两个问题 3.1.3 案例演示 3.2 通过实现Runnable的方式 3.2.1 步骤 3.2.2 代码演示 3.3 两种方式的比较 4. Thread类中常用方法 4.1 常用方法 4.2 线程的调度 4.3 线程的优先级 4.4 线程的分类 5. 线程的声明周期 5.1 生命周期的几个状态 5.2 线程状态转换图 6. 线程的同步 6.1 线

并发编程之线程创建到销毁、常用API

在前面一篇介绍了线程的生命周期[并发编程之多线程概念],在本篇将正式介绍如何创建.中断线程,以及线程是如何销毁的.最后,我们会讲解一些常见的线程API. 线程创建 Java 5 以前,实现线程有两种方式:扩展java.lang.Thread类,实现java.lang.Runnable接口.这两种方式都是都是直接创建线程,而每次new Thread都会消耗比较大的资源,导致每次新建对象时性能差:而且线程缺乏统一管理,可能无限制新建线程,相互之间竞争,很可能占用过多系统资源导致死机或OOM.同时,n