首页 > 系统相关 >c: thread in Ubuntu

c: thread in Ubuntu

时间:2023-10-22 20:37:28浏览次数:40  
标签:mtx task thread int printf Task Ubuntu include

 

/**
 * @file helloworld.c
 * @author your name (geovindu)
 * @brief 
 * ide: vscode  c11,c17
 * @version 0.1
 * @date 2023-10-21
 * 
 * @copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants
 * 
 */

#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
#include <unistd.h>
#include <sys/wait.h>
#include<threads.h>
#include<math.h>

#include "include/CheckTieck.h"
#include "include/TakeNumber.h"

//
#define threadcout 5

//
 thrd_t threadId[threadcout];
 //
 size_t task=0;

mtx_t task_mtx;   
 /**
  * @brief 
  * 
  */
struct timespec duration={.tv_sec=1,.tv_nsec=0};

/**
 * @brief 线程
 * 
 * @param agr 
 * @return int 
 */
 int execrteTask(void *agr)
 {

    mtx_lock(&task_mtx);
    size_t local_task = ++task;
    mtx_unlock(&task_mtx);

    //  mtx_lock(&task_mtx);                          // mutex lock - blocks until acquired
    //  printf_s("Task %zd started.\n", ++task);
    printf("Task %zd started.\n", local_task);

    thrd_sleep(&duration, NULL);                    // Just to make things take longer...
    double x = 0;
    for(int i = 0 ; i< 1000000000 ; ++i)
        x = sqrt(3.1415926);

    printf("  Task %zd finished\n", local_task);
    //  printf_s("  Task %zd finished\n", task);
    //  mtx_unlock(&task_mtx);                         // mutex unlock - for use by other threads
    return 0;
 }
/**
 * @brief 
 * 
 * @return int 
 */
int main(void)
{ 

        if(thrd_error == mtx_init(&task_mtx, mtx_timed))
        {
            printf(stderr, "Mutex creation failed.\n");
            thrd_exit(-2);
        }

    // Create the threads to carry out the tasks concurrently
    for(size_t i = 0 ; i<threadcout ; ++i)
        if(thrd_error == thrd_create(&(threadId[i]), execrteTask, NULL))
        {
        printf(stderr, "Thread creation failed.\n");
        thrd_exit(-1);
        }

    // Join the additional threads to the main thread
    for(size_t j = 0 ; j <threadcout ; ++j)
        thrd_join(threadId[j], NULL);

    pid_t pid;
    int status;

    pid = fork();  // 创建一个新进程

    if (pid < 0) {  // 如果创建失败,输出错误信息
        fprintf(stderr, "Fork Failed");
        return 1;
    } else if (pid == 0) {  // 子进程
        printf("I am the child %d\n",pid);
        execl("/bin/ls", "ls", NULL);  // 在子进程中执行 /bin/ls 程序
        printf("I am the child %d, and execl failed\n",pid);  // 如果 execl 返回,那么说明出错
    } else {  // 父进程
        wait(&status);  // 等待子进程结束
        printf("I am the parent %d, and my child has ended\n",pid);
    }


    printf("hello wolrd, c launguage! weblcome geovindu!涂聚文");
 
    QueueCalling *queue1;
      
    char select='1';
    //int num=1;//顾客序号
    int num=0; //叫号编号
    queue1=QueueInit(); //初始化队列
    if(queue1==NULL)
    {
        printf("创建队列时出错!\n");
        //getch();
        getchar();
        return 0;
    }
    do{
        //这里处理,列表不会显示两次
        if(select=='1' || select=='2')
        {
            printf("\n请选择具体操作:\n");
            printf("1.新到顾客\n");
            printf("2.下一个顾客\n");
            printf("0.退出\n") ;
            fflush(stdin);
        }
 
        select=getchar();//getch();
        switch(select)
        {
            case '1':
                add(queue1);
                printf("\n现在共有%d位顾客在等候!\n",QueueLen(queue1));
                break;
            case '2':
                next(queue1);
                printf("\n现在共有%d位顾客在等候!\n",QueueLen(queue1));
                break;
            case '0':
                break;
        }      
    }while(select!='0');
    QueueFree(queue1); //释放队列
    //getch();
    getchar();
    
    return 0;
}

  

 

标签:mtx,task,thread,int,printf,Task,Ubuntu,include
From: https://www.cnblogs.com/geovindu/p/17781013.html

相关文章

  • Ubuntu 22.10 阿里云源
    Ubuntu22.10更换阿里云源sudovim/etc/apt/sources.list```debhttp://mirrors.aliyun.com/ubuntu/kineticmainrestricteduniversemultiversedeb-srchttp://mirrors.aliyun.com/ubuntu/kineticmainrestricteduniversemultiversedebhttp://mirrors.aliyun.com/ubunt......
  • cadquery创建螺纹thread
    参考来源:https://github.com/CadQuery/cadquery/issues/407importmathimportcadqueryascqdefprofile(base,pitch,h,extra=True):"""pitch螺距Createsatrapezoidalwireforthecrosssectionofthethread.Ifthecrosssectiono......
  • 探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
    (文章目录)......
  • Ubuntu上解决快捷键与idea快捷键冲突
    Ubuntu上解决快捷键与idea快捷键冲突一、ubuntu本身系统导致,需要修改ubuntu快捷键解决方案:设置按钮→系统设置→硬件选项区域中的“键盘“→切换到”快捷键“选项卡中。将里面的ctrl+alt快捷键全部都禁用掉,按backspace禁用即可1.ctrl+alt+t会冲突解决方案:打开设置-找......
  • ubuntu 20.1 (linux) 下软件安装教程(基本上都是使用命令行安装)
    一、node1.安装教程#第二步,添加源后安装需要什么版本直接替换后面的数字即可,如果需要21,直接将20替换为21就可以了curl-sLhttps://deb.nodesource.com/setup_20.x|sudo-Ebash-#开始进行安装sudoaptinstall-ynodejs#https://learnku.com/articles/42581#......
  • 第一个驱动程序(在Ubuntu系统下运行)
    一、构造内核源码树#apt-cachesearchlinux-source#apt-getinstalllinux-source-4.4.0(下载的源码在目录/usr/src下)#解压内核源码tarxjf.....进入源码目录#makeoldconfig#make#makemodulesmakemodules_install12345678ref:http://blog.chinaunix.n......
  • UBUNTU下第一次写简单驱动(笔记)
    一、环境Ubuntu14.04+vmwaretools二、步骤先写个.c文件,驱动文件一般没有printf,有自己的一套,先写一个helloword.c /* *helloworld.c * *宇文凌风 * */     #include"linux/init.h" #include......
  • linux内核编译安装(Ubuntu替换内核)
    前言:Ubuntu替换内核一般是不会删除自己Ubuntu里面的东西的(只是内核改变,其它影响,放心搞就是了,而且可以变回原来的内核)实验环境:OS:Ubuntu20.04.2LTSOldKernel:linux5.15.0NewKernel:linux5.15.0(我测试过的只有原版本,升级其它版本试了不能开机)注:查看当前内核版本命令"uname......
  • 创建线程的三种方式:继承Thread、Runnable 接口、Callable 接口
    当在Java中创建线程时,有以下3种方法:1.通过实现Runnable接口:这是Java中创建线程的推荐方式,因为它允许你分离线程的任务(run方法)与线程的执行。以下是创建线程的步骤:创建一个实现Runnable接口的类,该接口包含一个run方法,这个方法将定义线程要执行的任务。classMyRunnableimpl......
  • Ubuntu Server LTS 修改网卡ip地址方式
    UbuntuServerLTS修改网卡ip地址方式、固定IP。 18.04之前版本通过修改/etc/network/interfaces方式,18.04版本开始通过netplan方式: 0、备份sudocp/etc/netplan/00-installer-config.yaml/etc/netplan/00-installer-config.yaml.bak 1、编辑yaml配置文件,注意缩......