linux操作系统实验一 线程创建与撤销

这篇博客介绍了Linux操作系统中的线程管理,包括线程创建、撤销、终止、挂起和关闭句柄等操作。通过实例代码展示了如何设置线程的取消状态,包括将线程设置为PTHREAD_CANCEL_DISABLE和重新启用PTHREAD_CANCEL_ENABLE的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建线程

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

/* 声明结构体 */
struct member
{
    int num;
    char *name;
};     

/* 定义线程pthread */
static void * pthread(void *arg)       
{
    struct member *temp;
    
    /* 线程pthread开始运行 */
    printf("pthread start!\n");
    
    /* 令主线程继续执行 */
    sleep(2);
    
    /* 打印传入参数 */
    temp = (struct member *)arg;      
    printf("member->num:%d\n",temp->num);
    printf("member->name:%s\n",temp->name);
    
    return NULL;
}

/* main函数 */
int main(int agrc,char* argv[])
{
    pthread_t tidp;
    struct member *b;

    /* 为结构体变量b赋值 */
    b = (struct member *)malloc(sizeof(struct member));           
    b->num=1;
    b->name="mlq";              

    /* 创建线程pthread */
    if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)
    {
        printf("create error!\n");
        return 1;
    }
    
    /* 令线程pthread先运行 */
    sleep(1);
    
    /* 线程pthread睡眠2s,此时main可以先执行 */
    printf("mian continue!\n");
    
    /* 等待线程pthread释放 */
    if (pthread_join(tidp, NULL))                  
    {
        printf("thread is not exit...\n");
        return -2;
    }
    
    return 0;
}

2.撤销线程

Linux线程可以取消其他线程,被取消的线程会被退出
线程本身可以设置不被其他线程取消

把线程状态设置为PTHREAD CANCEL

实验目的 (1)掌握Windows系统提供的线程创建撤销系统调用 (2)掌握Windows系统环境下线程创建撤销方法 2 实验准备知识 (1线程创建 CreateThread()完成线程创建。它在调用进程的地址空间上创建线程,执行指定的函数,并返回新建立线程的句柄。 原型: HANDLE CreateThread(   LPSECURITY_ATTRIBUTES lpThreadAttributes,   DWORD dwStackSize,   LPTHREAD_START_ROUTINE lpStartAddress,   LPVOID lpParameter,   DWORD dwCreationFlags,   LPDWORD lpThreadId);   参数说明:   lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。   dwStackSize,线程堆栈大小,般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。   lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:   DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法调用成功。   lpParameter:向线程函数传递的参数,是个指向结构的指针,不需传递参数时,为NULL。   dwCreationFlags :线程标志,可取值如下   CREATE_SUSPENDED: 创建个挂起的线程   0 :创建后立即激活。   lpThreadId:保存新线程的id。   返回值:   函数成功,返回线程句柄;函数失败返回false。 (2)撤销线程 ExitThread()用于撤销当前线程 原型: VOID ExitThread( DWORD dwExitCode ); 参数说明: DwExitCode:指定线程返回码 返回值: 该函数没有返回值 用法举例: ExitThread(0); (3)挂起线程 Sleep()用于挂起当前正在执行的线程 原型: VOID Sleep( DWORD dwMilliseconds ); 参数说明: dwMilliseconds:指定挂起时间,单位为ms(毫秒)。 返回值: 该函数没有返回值。 (4)关闭句柄 函数CloseHandle()用于关闭已打开对象的句柄,其作用释放动态申请的内存空间类似,这样可以释放系统资源,使进程安全运行。 原型: BOOL CloseHandle( HANDLE hObject ); 参数说明: hObject:已打开对象的句柄。 返回值: 成功,返回值为非0值;失败,则返回值为0.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值