线程的基本操作,创建线程,结束线程,新线程跟原线程共享变量

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>               // 包含线程库
#include <string.h>
void *thread_function(void *arg);                                                                       // 定义线程函数原型
//char message[] = "THREAD_TEST";                                                                 // 定义公用的内存空间
char message[100];

int main() {
	int res;                                                                                // 用于保存创建线程的返回值
    pthread_t a_thread;                                                                                  // 用于保存线程标识符等信息
    void *thread_result;                                                                   // 用于接收线程结束是的返回值
    res = pthread_create(&a_thread, NULL, thread_function, (void *) message);    // 创建线程
    if (res != 0) {                                                // 判断创建是否有错误
        perror("线程创建失败");
        exit(EXIT_FAILURE);
    }
    printf("等待线程结束...\n");
    res = pthread_join(a_thread, &thread_result);                                                // 等待线程结束
    if (res != 0) {                                                                                 // 判断结束线程是否有错误
        perror("等待线程结束失败");
        exit(EXIT_FAILURE);
    }
    printf("线程已结束,返回值:%s\n", (char *)thread_result);                           // 输出线程返回的消息
    printf("Message的值为:%s\n", message);                                                      // 输出公用的内存空间的值
    exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {                                                                      // 定义线程函数细节
    printf("线程在运行,参数为:%s\n", (char *)arg);                                             // 输出线程的参数
    sleep(3);                                                                                                    // 使线程休眠3秒
    strcpy(message, "线程修改");                                                                 // 修改公用的内存空间的值
    pthread_exit("线程执行完毕");                                                                        // 结束线程
}
时间: 2024-10-10 15:21:00

线程的基本操作,创建线程,结束线程,新线程跟原线程共享变量的相关文章

linux创建与结束线程

打算写一些入门级别的多线程笔记,等我把多线程的函数都整理完再一点点添加(一下子全都搞上去,会有种抓不到重点的感觉) 线程创建函数pthread_create(4) int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); 参数: thread: 用于标识一个线程,它是一个pthread_t类型的变量,在头文件pthreadtypes.h中定义,如下所

win32多线程 (一) 线程创建与结束等待

#include "stdafx.h"#include <Windows.h>#include <iostream> using namespace std; DWORD WINAPI ThreadFuncFirst(LPVOID param){ int iCount = 50; while(iCount--){  cout<<"\nThreadFuncFirst:"<<iCount; } return 0;} DWO

二、线程创建、结束

一.使用函数创建线程 1.thread 主线程从main开始,我们创建的线程也要从一个函数(初始函数)开始运行,函数结束,这个线程结束: 主线程执行完毕,代表整个进程执行完毕: 如果子线程还没执行完毕,一般情况下,这些子线程会被强行终止: 1.#include <iostream> 2.#include <string> 3.#include <thread> //线程 4.using namespace std; 5. 6.//创建的线程,也就是一个初始函数 7.vo

线程的基本操作

初始线程:1.新建线程 1)继承Thread类 2)实现Runnable接口2.线程终止 除非你很清楚你在做什么,否则不要随便使用stop()方法来停止一个线程.因为stop()方法太过于暴力,强行把执行到一半的线程终止,可能会引起一些数据不一致的问题. 通过定义标记变量stopme,当stopme=true时,在run内部返回结果或跳出循环.3.线程中断 线程中断是一种重要的线程协作机制.严格地讲,线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程,有人希望你退出啦!至于目标线

【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法

jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–ExecutorService:Executor的子接口,线程池的主要接口  |–ThreadPoolExecutor:ExecutorService的实现类  |–ScheduledExecutorService:ExecutorService的子接口,负责线程的调度  |–ScheduledThreadPo

Java总结(九)——(线程模块 一(线程的创建(方法一)与启动,线程状态与生命周期,进程与线程))

一.进程与线程 进程:每一个独立运行的程序称为一个进程 线程:线程时一个进程内部的一条执行路径,Java虚拟机允许程序并发的运行多个执行路径 *进程中执行运算的最小单位-->线程<--处理机分配 进程与线程的区别: (1)进程有独立的运行地址空间,一个进程崩溃后不会影响到其他的进程,而线程只是 一个进程中的一个执行路径,如果有一条线程奔溃了,可能会影响到进程中的的其他线程 (2)线程有自己的栈和局部变量,多个线程共享同一进程的地址空间 (3)一个进程至少有一个线程 多线程 (1)多线程 就是在

对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。

这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关心应用可同时处理的请求数,以及响应时间.应用本身和它运行在其中的web容器是两个很重要的影响因素.对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束.如果同时进来的请求多于当前可用的请求处理线程数,额外的线程就会被创建,直到到达配置的最大线程数(maxThreads

JDK5什么是新的堵塞队列线程(四)

一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当队列是满的时.往队列里加入元素的操作会被堵塞.直到其它的线程从队列移除一个或多个元素. 上图中:线程1往堵塞队列里加入元素,而线程2从堵塞队列里移除元素 /** * 堵塞队列的简单实现 */ public class BlockingQueue<T> { private List<T>

5.Java线程池的创建和使用

线程池 构建一个新的线程是有一定代价的,因为涉及到与操作系统的交互.如果程序中需要使用大量生命周期很短的线程,就应该使用线程池. 将Runnable对象交给线程池来执行,就会有一个线程调用run方法,当run方法退出的时候,线程不会死亡,而是在池中准备为下一个请求提供服务. 另一个使用线程池的理由是为了减少并发编程的数目,创建大量线程会大大降低性能,甚至使虚拟机崩溃,而使用线程池能限制并发编程的总数. 线程池的创建和使用 而创建线程池对象需要使用执行器(Executors),注意要加s,Exec

线程池的优点及线程池的创建方式

什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池. 在开发过程中,合理地使用线程池能够带来3个好处.第一:降低资源消耗.通过重复利用机制已降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行.第三:提高线程的可管理性.线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配.调优和监控.但是,要做到合理利用线程池,必须对其实现原理了如指掌.