当前位置: 首页 > 知识库问答 >
问题:

c++ - 多线程中打印问题?

叶国兴
2023-09-10
#include <pthread.h>#include <stdio.h>#include <unistd.h>void *testThread(void *arg){    printf("This is a thread test\n");    return NULL;}int main(){    pthread_t tid;    int ret;    ret = pthread_create(&tid,NULL,testThread,NULL);                             printf("This is a main thread\n");    return 0;} 

我把这段代码编译为名为a.out的程序,然后又写了一个shell脚本,shell脚本的功能是无限运行程序,然后等2秒后,我停止运行shell脚本,然后我发现在某次运行a.out时,"This is a thread test\n"被运行了两次,我就有一点疑惑,按理来说,如果testThread有机会运行的话,最多只打印一次"This is a thread test\n",结果就只打印了两次,我就想弄明白,为什么"This is a thread test\n"会被打印两次。
shlle脚本的内容如下

!/bin/bashwhile((1))do  echo "-------------------";                                                                                        ./a.out  echo "--------------------";done

运行的结果如下:

共有2个答案

穆鸿波
2023-09-10
我就想弄明白,为什么"This is a thread test\n"会被打印两次。

被打印多少次都不要奇怪, 你在循环创建进程, 进程又创建线程, 很显然, 这两次打印属于两个进程.

华章横
2023-09-10
#include <pthread.h>#include <stdio.h>#include <unistd.h>void *testThread(void *arg){    printf("This is a thread test\n");    return NULL;}int main(){    pthread_t tid;    int ret;    ret = pthread_create(&tid,NULL,testThread,NULL);                             printf("This is a main thread\n");    pthread_join(tid, NULL);  // 等待新线程完成    return 0;} 
 类似资料:
  • 我正在尝试将一系列参数传递给不同的c线程。当NumThreads == 1时,程序运行良好,但是当NumThreads 创建线程的位置: 并且成员函数被调用: 来自前三个线程的控制台输出:{ 所以ID和样本索引被正确地传递给了线程,但是srcPoint怎么对所有三个线程都是相同的呢?!?

  • 各位大佬请教一个问题,当我实现任务队列时rpushTasksQueue始终要比我上限少一个,比如我设定的上限是3,然后他2执行完就结束了,求救

  • 主要内容:线程生命周期,主线程,Thread 类中的属性和方法,创建线程,管理线程,销毁线程多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的任务。如果您的应用程序涉及到复杂且耗时的操作,那么使用多线程来执行是非常有益的。使用多线程可以节省 CPU 资源,同时提高应用程序的执行效率,例如现代操作系统对并发编程的实现就用到了多线程。到目前为止我们编写的示例程序都是单线程的应用程序,这样的应用程序一次只能执行一个任务。 线程

  • 多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。 基于线程的多任务处理是同一程序的片段的并发执行。 多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。 本教程假设您使用的是 Linux 操作系统,我们要使用

  • 问题内容: 使用线程进行奇数打印,创建一个线程类,两个线程实例。 一个将打印奇数,而另一个将打印偶数。 我做了以下编码。但这涉及到死锁状态。有人可以解释一下原因吗? 输出: 奇数1偶数2 然后陷入僵局!!!!!! 谢谢你的帮助。 问题答案: 您正在等待并通知其他对象( 监视器 )。 这个想法是,你在做和做的时候可以打电话等待一个人做。 将您的方法更改为类似 和方法类似。 然后为提供一个对象: 输出

  • 问题内容: 我在这里看到过类似的文章,但是它涉及的是Python 2.6,我希望有一种更简单的方法。 从阅读线程看来,最好的方法似乎就是用sys.stdout.write(s +’\ n’)替换我所有的打印语句? 我希望有一种更好的方法可以让我仍然使用打印 问题答案: from future import print_function print = lambda x: sys.stdout.wr