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

网上做问卷调查网站做网站申请完空间后下一步干啥

网上做问卷调查网站,做网站申请完空间后下一步干啥,旧版wordpress,dede 电商网站模板下载创建子线程的逻辑相比子进程要更容易理解一些#xff0c;因为线程没有像进程那样复制很多东西另起炉灶#xff0c;子线程从传入的开始函数开始运行#xff0c;但是难点在于传入参数和回收时获取退出状态#xff0c;因为这两个原本都是void *类型的#xff0c;而我们在使用…创建子线程的逻辑相比子进程要更容易理解一些因为线程没有像进程那样复制很多东西另起炉灶子线程从传入的开始函数开始运行但是难点在于传入参数和回收时获取退出状态因为这两个原本都是void *类型的而我们在使用时就必须进行转换。先上代码然后再根据代码进行解释 void pthread_check(int ret, const std::string msg error, int default_ret 0);using std::cout; using std::endl; namespace {pthread_mutex_t mutex1; }void *func(void * argc) { // int idx *reinterpret_castint *(argc);int idx reinterpret_castlong(argc);pthread_mutex_lock(mutex1);cout I am thread idx \n;pthread_mutex_unlock(mutex1);//pthread_exit(argc);return argc; }void create_multi_thread() {pthread_mutex_init(mutex1, nullptr);constexpr int N 5;pthread_t tid[N];void *ret;for (int i 0; i N; i) {pthread_check(pthread_create(tid[i], nullptr, func, reinterpret_castvoid *(i)));}pthread_mutex_lock(mutex1);cout I am thread 5 \n;pthread_mutex_unlock(mutex1);for (int i 0; i N; i) {pthread_join(tid[i], ret);pthread_mutex_lock(mutex1);cout thread i exits with status : reinterpret_castlong(ret) \n;pthread_mutex_unlock(mutex1);}pthread_exit(0); } 其中pthread_check函数是我写的一个用于检查返回值的工具函数mutex1是互斥量用于加锁控制输出否则可能会很乱子线程的工作很简单就是输出自己是第几个线程。 其中比较关键的地方就是pthread_create的第四个参数向开始函数传参。这里我们可以看到把循环变量i转换使用reinterpret_cast转换成了void *类型的然后再在开始函数func中使用reinterpret_cast函数将void *类型转换成了long类型。 你可能觉得奇怪为什么要把一个int类型直接转换成void *类型为什么不将其地址传入呢首先要想清楚为什么使用void *类型作为传入参数的类型我认为指针类型比基本类型更加广泛指针类型可以保存基本类型的值也可以指向内存但是基本类型是无法指向内存的值的因此使用空指针类型灵活度更高这里仅仅是这个场景下需要传入一个整数而我们不想大费周章在堆上分配内存罢了如果分配内存的话显然是需要指针的。 可不可以传入int值的地址而不是将其本身传入进去呢如果是单个线程应该是没有什么问题但是多个子线程下就有问题了因为该函数的栈空间是线程共享的因此当主控线程修改了循环变量的值以后子线程中的值也会被修改这显然不是我们想要的如果还是感觉到无法理解的话可以自己手动尝试一下。 第二个问题就是为什么要在func函数中使用reinterpret_cast将void *转换为long类型而不是int类型因为在C里面转换成int类型会报错说精度丢失虽然C语言里面好像不会我看大家都在随便转感觉这个转换太魔性了还是C规范一些但是一般情况下long类型和指针类型的大小是差不多大的转换成 long类型就不用担心精度丢失了。 第三个问题就是在使用pthread_join函数回收子线程的时候我们使用ret来获取子线程退出状态经过测试发现在子线程的开始函数的返回值就是最后的子线程退出状态当然我们也可以使用pthread_exit函数 ret本身是void *类型pthread_join函数需要一个void **类型用来接收返回的void *类型在接收成功后我们再次将其转换成long类型。 运行结果如下
http://www.yutouwan.com/news/227001/

相关文章:

  • 做笔记网站广告推广的软件
  • 晋中推广型网站建设网站开发验收资料
  • 网站版心怎么做网页制作素材及流程
  • 3一5万电动汽车佛山网站优化流程
  • 做网站论坛太原百度网站快速优化
  • wordpress安装网站吗wordpress那个版本好用
  • 专业做灯具的网站如何建淘宝客网站
  • 济南品牌网站建设介绍国外网站加速神器
  • php mysql网站开发工资公司网页怎么做的
  • 百度站长平台网站收录wordpress出名的网站
  • 龙岩网站设计 都找推商吧系统建设工程规划许可证网站
  • wordpress 做购物网站广州:推动优化防控措施落
  • 快递公司网站源码全屏网站设计技巧
  • html5做宠物饲养网站天津建设工程信息网网
  • 有做财经 直播的网站吗室内效果图制作
  • 加强机关门户网站建设方案域名过户流程
  • 网站建设的市场容量中升乙源建设工程有限公司网站
  • 黑色炫酷灯饰照明科技企业商务网站模板做别人一样的网站吗
  • 网站建设的初步预算wordpress破解key
  • 如何代做网站iis7.0建设网站
  • 和客户谈建网站怎么说怎么找企业做网站
  • 做网站怎么在主机上放图片有哪些基于网站开发的报表设计器
  • 个人与企业签订网站开发合同成都建设银行保安招聘网站
  • 做精细化工网站建设网页设计制作公司
  • 养老网站建设 中企动力网站是用虚拟机做还是服务器
  • 网站html静态化网站使用问题
  • 章丘做网站中英文双语网站 滑动切换
  • 有二维码怎样做网站哪些网站做的比较好
  • 做网站码伊通县建设局网站
  • 越秀网站建设优化把网站放到服务器