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

网站建设专wordpress被大量注册

网站建设专,wordpress被大量注册,桂林手机网站建设,怎么黑wordpress第1关#xff1a;创建线程 任务描述 通常我们编写的程序都是单进程#xff0c;如果在一个进程中没有创建新的线程#xff0c;则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务#xff1a;学会使用C语言在Linux系统中使用pthrea…第1关创建线程 任务描述 通常我们编写的程序都是单进程如果在一个进程中没有创建新的线程则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务学会使用C语言在Linux系统中使用pthread_create库函数创建一个新的线程。 相关知识 通常我们编写的程序都是单线程程序单线程的程序都是按照一定的顺序按序的执行。有些情况下我们需要在一个进程中同时执行多个控制流程这时候线程就派上了用场。例如我们需要实现一个在线音乐播放器一方面我们在线播放用户选中的音乐另一方面又需要同时下载曲子这些任务需要同时被执行而不是按序一个一个的执行这样才会使得用户一边播放音乐一边下载自己喜欢的曲子。针对以上需求我们可以用多线程实现一个线程专门在线播放用户选中的音乐另外一个线程专门用户下载曲子。 通常一个进程只包含一个线程我们把这个线程叫做主线程例如main函数就是一个主线程。如果在主线程里创建多个线程那么程序就会在创建线程的地方产生分支变成了多个程序来同时运行。这似乎和我们以前学习的多进程一样其实背后的原理还是有所区别。 在多进程中子进程是通过拷贝父进程的地址空间来实现而在多线程中同一进程中的所有线程都是共享程序代码一段代码可以被多个线程来执行。 在Linux系统中我们可以通过pthread_create函数来创建线程。我们可以使用man命令来查询该函数的使用方法。具体的查询命令为man 3 pthread_create 使用pthread_create函数创建线程 pthread_create函数的具体的说明如下 需要的头文件如下 #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_create返回值为0调用失败返回一个非零的值。 注意pthread_create一旦调用成功新创建的线程将开始运行第3个参数所指向的函数原来的线程继续往下运行。由于线程是第三库所提供的因此在编译包含线程的程序时我们需要手动链接线程库只需在编译命令加上-lpthread参数即可。 案例演示1: 编写一个程序使用pthread_create函数创建一个线程在新创建的线程中打印一个字符串在主线程中也打印一个字符串。详细代码如下所示 #include stdio.h #include pthread.h void *printString(void *arg) {printf(This is My first thread\n);return NULL; } int main() {pthread_t thread;int ret pthread_create(thread, NULL, printString, NULL);if(ret ! 0){printf(创建线程失败\n);return -1;}sleep(1);printf(This is main thread\n);return 0; } 将以上代码保存为createThread.c文件编译执行。可以看到新创建的线程被调用成功。 案例演示2: 编写一个程序使用pthread_create函数创建两个线程并在每个线程中接受主线程传来的字符串并将其打印出来。详细代码如下所示 #include stdio.h #include pthread.h void *printString(void *arg) {printf(print String: %s\n, (char *)arg);return NULL; } int main() {pthread_t thread1, thread2;int ret pthread_create(thread1, NULL, printString, This is first thread);if(ret ! 0){printf(创建线程失败\n);return -1;}ret pthread_create(thread2, NULL, printString, This is second thread);if(ret ! 0){printf(创建线程失败\n);return -1;}sleep(1);printf(This is main thread\n);return 0; } 将以上代码保存为printThread.c文件编译执行。可以看到新创建的按照主线程传递的参数将指定的字符串打印出来。 注意编译程序的时候需要手动加上线程库-lpthread。否则编译时会出错。 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码具体要求如下 补全createThread函数使用pthread_create函数创建线程并将start_routine作为线程处理函数arg作为线程处理函数的参数同时将创建成功的线程ID作为createThread函数的返回值。 测试说明 本关的测试需要用户在右侧代码页中补全代码然后点击评测按钮平台会自动验证用户是否按照要求去检测结果。 开始你的任务吧祝你成功 解答 #include stdio.h #include pthread.h/************************* 参数start_routine: 函数指针用于指向线程函数* 参数arg: 是线程函数的参数* 返回值: 返回线程ID *************************/ pthread_t createThread(void *(*start_routine) (void *), void *arg) {pthread_t thread;/********** BEGIN **********/int ret pthread_create(thread, NULL, start_routine,arg); /********** END **********/return thread; }第2关线程挂起 任务描述 在学习多进程编程的时候我们学习了如何等待一个进程结束那么在多线程中也存在同样的操作如何使得一个线程挂起等待其他的线程先执行。本关我们将介绍如何挂起一个线程并等待指定线程。 本关任务学会使用C语言在Linux系统中使用pthread_join库函数挂起当前线程并等待指定的线程。 相关知识 通过上一管卡的学习我们学会了如何创建一个线程。在上一关中我们遗留了一个未解决的问题不知道细心的你发现没那就是我们在案例演示中使用了sleep函数给主线程睡眠了1秒如果主线程先退出那么新创建的线程会发生什么正确答案是如果主线程先退出那么还未执行完成的其他所有线程将被终止。因此保证主线程最后一个退出是非常重要的。 接下来我们用实例验证如果主线程先退出那么其他的线程会不会受到影响将上一关中的案例一修改成如下 #include stdio.h #include pthread.h void *printString(void *arg) {sleep(1);printf(This is My first thread\n);return NULL; } int main() {pthread_t thread;int ret pthread_create(thread, NULL, printString, NULL);if(ret ! 0){printf(创建线程失败\n);return -1;}printf(This is main thread\n);return 0; } 编译执行。可以看到当主线程退出后新创建的线程是不会继续执行的。 在Linux系统中提供了挂起当前线程用来等待一个指定线程结束的库函数pthread_join。这个函数相当于进程等待函数waitpid他可以挂起当前线程并一直等待指定线程直到指定线程退出后该函数才会返回继续执行。 在Linux系统中我们可以通过pthread_join函数来挂起线程。我们可以使用man命令来查询该函数的使用方法。具体的查询命令为man 3 pthread_join 使用pthread_join挂起线程 pthread_join函数的具体的说明如下 需要的头文件如下 #include pthread.h 函数格式如下 int pthread_join(pthread_t thread, void **retval); 参数说明 thread该参数是一个线程ID用于指定要等待其终止的线程 retval该参数用于存放等待线程的返回值如果不关注线程的退出值则可以设置为NULL 函数返回值说明 调用成功pthread_join返回值为0调用失败返回一个非零的值。 注意由于线程是第三库所提供的因此在编译包含线程操作的程序时我们需要手动链接线程库只需在编译命令加上-lpthread参数即可。 案例演示1: 编写一个程序使用pthread_join函数挂起当前线程等待新创建的线程先执行。详细代码如下所示 #include stdio.h #include pthread.h void *printString(void *arg) {sleep(1);printf(This is My first thread\n);return NULL; } int main() {pthread_t thread;int ret pthread_create(thread, NULL, printString, NULL);if(ret ! 0){printf(创建线程失败\n);return -1;}if(pthread_join(thread, NULL) ! 0){printf(等待线程失败\n);return -1;}printf(This is main thread\n);return 0; } 将以上代码保存为joinThread.c文件编译执行。可以看到尽管新创建的线程睡眠了1秒然后还是被正常的运行完。 注意编译程序的时候需要手动加上线程库-lpthread。否则编译时会出错。 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码具体要求如下 补全waitThread函数使用pthread_join函数挂起当前线程等待指定线程结束thread为要等待的线程ID号waitThread函数等待线程成功返回0失败返回-1。 测试说明 本关的测试需要用户在右侧代码页中补全代码然后点击评测按钮平台会自动验证用户是否按照要求去检测结果。 开始你的任务吧祝你成功 解答 #include stdio.h #include pthread.h/************************* 参数thread: 需要等待结束的线程ID号* 返回值: 等待成功返回0失败返回-1* 提示: 忽略线程返回值 *************************/ int waitThread(pthread_t thread) {int ret -1;/********** BEGIN **********/int pthread_join(pthread_t thread, void **waitThread);if(pthread_join(thread, NULL) ! 0) /********** END **********/return ret; }第3关线程终止 任务描述 在学习多进程编程的时候我们知道进程的退出有很多中方式常见的有exit函数而线程的退出也有多种方法。本关我们将介绍如何终止一个线程的执行。 本关任务学会使用C语言在Linux系统中终止一个线程。 相关知识 Linux下有三种方式可以是一个线程终止分别是(1)通过return从线程函数返回(2)通过调用pthread_exit使得一个线程退出(3)通过调用pthread_cancel终止一个线程 有两种特殊情况要注意第一种情况就是在主线程中如果从main函数返回或者是调用exit函数来终止主线程的执行则整个进程将终止执行此时进程中的所有线程也将被终止执行因此在主线程中不能过早的退出这就是我们上一关中所介绍的为什么要使用pthread_join函数来挂起主线程的原因。另一种情况就是如果在主线程中调用pthread_exit函数终止主线程的执行则仅仅是主线程消亡进程是不会被终止的因此进程内的其他线程也不会被终止直到所有线程执行结束进程才会被终止。 在上一关中我们学习了pthread_join函数等待一个线程的结束并获取线程退出值那么线程以不同的方法终止通过pthread_join得到的退出值也是不同的总结如下 如果线程通过调用return返回则pthread_join所得到的退出值就是线程函数的return的值 如果线程是通过调用pthread_cancel异常终止则pthread_join所得到的退出值是PTHREAD_CANCELED 如果线程是通过调用pthread_exit异常终止则pthread_join所得到的退出值就是pthread_exit函数的参数值 我们可以使用man命令来查询这些函数的使用方法。具体的查询命令为man 3 函数名 使用pthread_exit退出线程 pthread_exit函数的具体的说明如下 需要的头文件如下 #include pthread.h 函数格式如下 void pthread_exit(void *retval); 参数说明 retval线程的返回值 函数返回值说明 无返回值。 注意由于线程是第三库所提供的因此在编译包含线程操作的程序时我们需要手动链接线程库只需在编译命令加上-lpthread参数即可。 案例演示1: 编写一个程序使用pthread_exit函数退出线程并使用pthread_join函数获取线程的退出值。详细代码如下所示 #include stdio.h #include pthread.h void *printString(void *arg) {sleep(1);printf(This is My first thread\n);pthread_exit(thread finished); } int main() {pthread_t thread;int ret pthread_create(thread, NULL, printString, NULL);if(ret ! 0){printf(创建线程失败\n);return -1;}void *status NULL;if(pthread_join(thread, status) ! 0){printf(等待线程失败\n);return -1;}printf(first thread exit(%s)\n, (char *)status);printf(This is main thread\n);return 0; } 将以上代码保存为exitThread.c文件编译执行。可以看到新创建的线程退出的代码为thread finished并且在主线程中使用pthread_join函数成功的获取到退出代码。 注意编译程序的时候需要手动加上线程库-lpthread。否则编译时会出错。 使用pthread_cancel退出线程 pthread_cancel函数的具体的说明如下 需要的头文件如下 #include pthread.h 函数格式如下 int pthread_cancel(pthread_t thread); 参数说明 thread需要被取消运行的线程ID 函数返回值说明 调用成功返回0调用失败返回一个非零值。 注意由于线程是第三库所提供的因此在编译包含线程操作的程序时我们需要手动链接线程库只需在编译命令加上-lpthread参数即可。 案例演示1: 编写一个程序使用pthread_cancel函数退出线程并使用pthread_join函数获取线程的退出值。详细代码如下所示 #include stdio.h #include pthread.h void *printString(void *arg) {while(1){printf(This is My first thread\n);sleep(1);} } int main() {pthread_t thread;int ret pthread_create(thread, NULL, printString, NULL);if(ret ! 0){printf(创建线程失败\n);return -1;}sleep(2);ret pthread_cancel(thread);if(ret ! 0){printf(cancel thread(%lu) failure\n, thread);return -1;}void *status NULL;if(pthread_join(thread, status) ! 0){printf(等待线程失败\n);return -1;}printf(first thread exit(%d)\n, (int)status);printf(This is main thread\n);return 0; } 将以上代码保存为cancelThread.c文件编译执行。可以看到新创建的线程被主线程使用pthread_cancel函数强制取消执行并且退出的代码为-1也就是PTHREAD_CANCELED在Linux系统中的定义为-1。 注意编译程序的时候需要手动加上线程库-lpthread。否则编译时会出错。 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码具体要求如下 补全cancelThread函数使用pthread_cancel函数终止指定的线程thread为线程要被取消的线程ID号调用成功返回0否则返回-1。 测试说明 本关的测试需要用户在右侧代码页中补全代码然后点击评测按钮平台会自动验证用户是否按照要求去检测结果。 开始你的任务吧祝你成功 解答 #include stdio.h #include pthread.h/************************* 参数thread: 需要等待结束的线程ID号* 返回值: 等待成功返回0失败返回-1* 提示: 忽略线程返回值 *************************/ int cancelThread(pthread_t thread) {int ret -1;/********** BEGIN **********/ret pthread_cancel(thread);/********** END **********/return ret; }
http://www.zqtcl.cn/news/75461/

相关文章:

  • 前程无忧怎么做网站食品公司网站模板
  • 广州网站改版设计零售空间设计公司
  • 天津住房和城乡建设厅官方网站如何知道一个网站的流量
  • 网站开发资金预算2022广告行业发展现状及趋势
  • 房产局网站建设方案wordpress响应式网站模板
  • 做网站读哪个专业中国招标采购导航网
  • 洛夕网站建设机关网站建设存在的问题
  • 用一个织梦程序做两个网站wordpress 百度商桥
  • 莱芜高端网站建设报价承接网络推广外包业务
  • 适合个人网站wap网站建设兴田德润实惠
  • 长沙企业网站建设收费asp网站实现php栏目
  • 怎样做网站兼职做网站要多少钱怎么样
  • redis做缓存的网站并发数wordpress更新 ftp
  • 网站服务对生活的影响深圳做网站推广排名
  • 自助建站和速成网站个人业务网站创建
  • 做app简单还是网站如何做网站实现收入稳定
  • 网站icp备案信息不能为空企业专业网站设计公
  • 如何建一个网站教程品牌建设推广
  • 河北网站建设价格低网站建设运动会成绩管理系统
  • 班级网站策划书深圳专业o2o网站设计公司
  • 怎样创建网站教程被关闭的设计网站
  • 濮阳做网站网站建设分工
  • 做网站的又营业执照的吗做网页公司
  • 什么站做咨询网站好互联网专业主要学什么
  • 安徽汽车网网站建设做海报素材网站推荐
  • 网络营销网站狼雨seo培训
  • 网站的联系我们怎么做深圳专业做网站建网站价格
  • 网站建设法律wordpress只显示文章标题
  • 网络小说网站推广策划方案阳光保险网站
  • 做网站哪家好 要钱网站建设 销售 知乎