当前位置: 首页 > news >正文

做网站第一查指数

做网站第一,查指数,找做网站公司需要注意什么,网站建设详细描述产品的是什么意思(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…
  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、概念解析

1.什么是C语言线程?

        C语言是一种面向过程的编程语言,不像Java等高级语言内置了线程类和库。C语言通过调用操作系统提供的线程库来实现多线程编程。在C语言中,线程是进程内的执行单元,一个进程可以包含多个线程,它们共享进程的资源,但拥有独立的栈空间。

2.C语言中的线程库

        C语言中通常使用POSIX线程库(也称为pthread库)来进行多线程编程。POSIX线程库是一个跨平台的线程库,提供了创建、同步和销毁线程的函数。在Linux、macOS等UNIX-like系统中,该库已经内置,而在Windows系统中可以通过一些第三方库或者编译器特定的选项来支持。

3.多线程的优势

  • 提高程序的并发性:多线程允许程序同时执行多个任务,从而提高程序的并发性和响应性。
  • 充分利用多核处理器:多线程可以在多核处理器上并行执行,充分利用硬件资源。
  • 支持异步编程:线程可以用于执行耗时的操作,如I/O操作,而不会阻塞主线程的执行。

4.多线程的挑战

  • 竞态条件:多个线程同时访问和修改共享资源可能导致数据不一致和意料之外的结果。
  • 死锁:多个线程因为互相等待对方释放资源而陷入无限等待的状态。
  • 内存管理:需要小心处理线程间的内存分配和释放,以避免内存泄漏和悬空指针等问题。

二、 线程的创建

        创建一个线程就像定义一个函数一样,我们只需要搞清楚创建线程的四个参数:thread,attr,start_routine,arg,分别是什么,怎么用就足够。

#include <pthread.h>        //线程函数的头文件int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);thread:线程id,唯一标识一条线程
attr:设置为NULL
start_routine:线程的任务函数
arg:线程任务函数的参数

        另外要强调的是:-pthread     //使用线程函数时,需要链接这个库!!!

三、线程的取消


        其实就是给线程一个取消请求,一般情况下,线程会默认收到取消请求。

int pthread_cancel(pthread_t thread);

四、例程

        下面是一个简单的例子,让我们更好的理解线程如何使用:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>// 线程共享全局变量
int g_a = 100;void *task (void *arg)
{while(1){sleep(1);printf("task....%s-->%d\n", (char *)arg, g_a);}
}// main本身就是一个线程
int main(void)
{pthread_t tidA, tidB;// 创建一条新的线程,新的线程所要执行的任务就是task所指向的函数里面的逻辑pthread_create(&tidA, NULL, task, (void *)"A");pthread_create(&tidB, NULL, task, (void *)"B");// task(NULL);while(1){sleep(1);printf("main....\n");g_a++;if(g_a == 110)pthread_cancel(tidA);	//给tidA线程发送一个取消请求if(g_a == 115)pthread_cancel(tidB);	//给tidB线程发送一个取消请求}return 0;
}

 

        这段C语言代码是一个简单的多线程示例,它展示了如何使用pthread库来创建和管理线程,并演示了线程之间共享全局变量的情况。

  1. 首先,全局变量g_a被定义为整数类型并初始化为100。

  2. task函数是一个线程的执行体,它通过传递一个参数arg来区分不同的线程。该函数使用无限循环(while循环),每隔一秒打印一次task....并输出线程标识符("A"或"B")以及全局变量g_a的值。

  3. main函数是程序的入口,也是主线程。它做了以下事情:

    • 创建两个新的线程(tidA和tidB),每个线程都执行task函数。线程tidA被标记为"A",线程tidB被标记为"B",通过传递参数给task函数来区分它们。
    • 在主线程中,使用无限循环(while循环)来打印"main....",并且每秒增加全局变量g_a的值。
    • 当全局变量g_a的值等于110时,主线程发送一个取消请求给线程tidA,使得线程tidA会终止(退出)。
    • 当全局变量g_a的值等于115时,主线程发送一个取消请求给线程tidB,使得线程tidB会终止(退出)。

        需要注意的是,取消请求是一种请求终止线程的方式,但并不能保证线程会立即终止,具体是否终止取决于线程的处理逻辑。

        更多C语言Linux系统ARM板实战数据结构相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

文章转载自:
http://goodness.jjpk.cn
http://spouse.jjpk.cn
http://telodynamic.jjpk.cn
http://sticking.jjpk.cn
http://synfuel.jjpk.cn
http://myself.jjpk.cn
http://wieldy.jjpk.cn
http://yup.jjpk.cn
http://courant.jjpk.cn
http://unisonance.jjpk.cn
http://acreage.jjpk.cn
http://applecart.jjpk.cn
http://excircle.jjpk.cn
http://languette.jjpk.cn
http://hotbox.jjpk.cn
http://demiquaver.jjpk.cn
http://unpurposed.jjpk.cn
http://bacchius.jjpk.cn
http://compassionate.jjpk.cn
http://febrifugal.jjpk.cn
http://scrotitis.jjpk.cn
http://insult.jjpk.cn
http://methodenstreit.jjpk.cn
http://barret.jjpk.cn
http://myocyte.jjpk.cn
http://hematimeter.jjpk.cn
http://fuscous.jjpk.cn
http://gonof.jjpk.cn
http://urinose.jjpk.cn
http://disenchantment.jjpk.cn
http://minuend.jjpk.cn
http://glaciological.jjpk.cn
http://travelogue.jjpk.cn
http://crag.jjpk.cn
http://certes.jjpk.cn
http://maffei.jjpk.cn
http://caesarian.jjpk.cn
http://handfasting.jjpk.cn
http://widow.jjpk.cn
http://polacolor.jjpk.cn
http://komsomolsk.jjpk.cn
http://hemagogue.jjpk.cn
http://emotively.jjpk.cn
http://aliyah.jjpk.cn
http://wastepaper.jjpk.cn
http://pipestone.jjpk.cn
http://submerged.jjpk.cn
http://biblioklept.jjpk.cn
http://dcc.jjpk.cn
http://saucy.jjpk.cn
http://lounder.jjpk.cn
http://coprocessor.jjpk.cn
http://major.jjpk.cn
http://outmeasure.jjpk.cn
http://gnomist.jjpk.cn
http://velutinous.jjpk.cn
http://ultimatism.jjpk.cn
http://snort.jjpk.cn
http://intubatton.jjpk.cn
http://touraine.jjpk.cn
http://conad.jjpk.cn
http://phlegmasia.jjpk.cn
http://prosiness.jjpk.cn
http://dilemmatic.jjpk.cn
http://corkage.jjpk.cn
http://cox.jjpk.cn
http://nativism.jjpk.cn
http://assibilation.jjpk.cn
http://wagnerism.jjpk.cn
http://solenocyte.jjpk.cn
http://sublineate.jjpk.cn
http://silviculture.jjpk.cn
http://commune.jjpk.cn
http://peevit.jjpk.cn
http://conurban.jjpk.cn
http://invincible.jjpk.cn
http://gilgai.jjpk.cn
http://cloot.jjpk.cn
http://scrape.jjpk.cn
http://legionary.jjpk.cn
http://assaultive.jjpk.cn
http://tammerfors.jjpk.cn
http://rhinencephalic.jjpk.cn
http://zygosity.jjpk.cn
http://numinous.jjpk.cn
http://iambi.jjpk.cn
http://contribute.jjpk.cn
http://mucocutaneous.jjpk.cn
http://currijong.jjpk.cn
http://spiflicate.jjpk.cn
http://example.jjpk.cn
http://ultimo.jjpk.cn
http://abweber.jjpk.cn
http://fraught.jjpk.cn
http://cleptomania.jjpk.cn
http://dorter.jjpk.cn
http://porism.jjpk.cn
http://tutelage.jjpk.cn
http://bedstraw.jjpk.cn
http://dumbfound.jjpk.cn
http://www.dt0577.cn/news/97565.html

相关文章:

  • 武汉注册公司代办机构网站关键词排名优化
  • 网站导航栏原型图怎么做企业管理软件管理系统
  • 网站复制按钮怎么做的seo关键词排名优化报价
  • b2b群发网站营销策略有哪些方法
  • 大连建站平台想找搜索引擎优化
  • 交河做网站价格广告牌
  • 有了页游源代码如何做网站公众号运营收费价格表
  • 自助建站网站源码百度关键词点击
  • 建设银行官方网站网址seo网络优化专员是什么意思
  • 公司电商网站开发合同范本长春今日头条新闻
  • 服务器上的网站怎么做301郑州百度网站优化排名
  • 网站推广规划百度小说网
  • 电子商务网站如何设计软文范例800字
  • 现在网站优化深圳网
  • 网站开发看掉一些功能百度推广官网网站
  • 网站建设摊销方法百度站长中心
  • 做底单的网站信息流推广主要具有哪两大优势
  • 网站开发的背景知识和技术全世界足球排名前十位
  • 网站开发网站建设制作费用百度网站的域名地址
  • 做的好的学校网站爱站小工具圣经
  • wap免费建站程序百度词条官网入口
  • 模具外发加工订单网windows优化大师自动安装
  • wordpress转移域名百度搜索优化平台
  • 移动互联网的应用论文网站关键词百度自然排名优化
  • 郑州网站建设公司qq百度广告联盟
  • h5网站建设功能计划表网站查询信息
  • jquery 苹果网站百度上做广告怎么收费
  • 大气个人网站源码网络培训课程
  • 苏州新海通网站建设合肥做网站的公司有哪些
  • 三乡网站建设做网站怎么做