| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 378 人关注过本帖
标题:求一最简单多线程程序
只看楼主 加入收藏
lxk1732942
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:281
专家分:182
注 册:2018-9-4
结帖率:100%
  已结贴   问题点数:20  回复次数:13   
求一最简单多线程程序
前两天不经意看到多线程这一词,就去百度了一下,但是还是没有搞明白为什么一个程序可以同时进行两个任务,我学了几个月的C语言(貌似是个新手...),写的所有程序都是从上至下一行一行地执行代码,同一时间只能做一件事情。
所以希望大佬可以写一个最简单最简单的多线程程序,能过体现其工作原理就好了。
2019-01-05 15:34
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:172
帖 子:6436
专家分:28361
注 册:2014-5-20
  得分:5 
百度就有很多简单的示例,写好多线程本来就不简单,最简单最简单的是什么意思?或者说说想用多线程做点什么。
2019-01-05 17:39
擦汗的男人
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2019-1-5
  得分:5 
你说的应该是“建立和运行包含多个文件的程序的方法
以下内容摘自《C程序设计(第四版)学习辅导》 清华大学出版社 谭浩强著。侵删!
1、编辑好同一程序的若干个源程序,注意放在一个文件夹里;

内容如下:
file1:

#include<stdio.h>
int A;
int main()
{
    int power(int);
    int b=3,c,d,m;
    printf("enter the number a and its power:");
    scanf("%d %d",&A,&m);
    c=A*b;
    printf("%d*%d=%d\n",A,b,c);
    d=power(m);
    printf("%d^%d=%d",A,m,d);
    return 0;
}

file2:

extern A;
int power(int n)
{int i,y=1;
for(i=1;i<=n;i++)
y*=A;
return(y);
}

2、在同一个文件夹位置建立工作空间,并在工作空间内建立工程,步骤如下图;


(此处选择:“Win32 Console Application”!)



3、在工程里导入源文件就可以运行啦



附、这两个源程序的目的是为了说明:将一个文件中的外部变量(此例中的A)引用到另一个文件中时,需要使用extern进行声明!

码字码图不易!么么哒。
作者:擦汗的男人201901051838。

[此贴子已经被作者于2019-1-5 20:27编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2019-01-05 18:38
lxk1732942
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:281
专家分:182
注 册:2018-9-4
  得分:0 
回复 3楼 擦汗的男人
你说的这个我会,而且跟多线程没有啥关系。
2019-01-05 22:59
lxk1732942
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:281
专家分:182
注 册:2018-9-4
  得分:0 
回复 2楼 吹水佬
两个线程,各自任务就只输出一行字符串就好了,不用复杂。
2019-01-05 22:59
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:757
专家分:734
注 册:2017-1-4
  得分:5 
#include<iostream>  
#include<pthread.h>  
using namespace std;  
  
pthread_once_t once = PTHREAD_ONCE_INIT;  
  
void once_run(void)  
{  
        cout<<"once_run in thread "<<(unsigned int )pthread_self()<<endl;  
}  
  
void * child1(void * arg)  
{  
        pthread_t tid =pthread_self();  
        cout<<"thread "<<(unsigned int )tid<<" enter"<<endl;  
        pthread_once(&once,once_run);  
        cout<<"thread "<<tid<<" return"<<endl;  
}  
  
  
void * child2(void * arg)  
{  
        pthread_t tid =pthread_self();  
        cout<<"thread "<<(unsigned int )tid<<" enter"<<endl;  
        pthread_once(&once,once_run);  
        cout<<"thread "<<tid<<" return"<<endl;  
}  
  
int main()  
{  
        pthread_t tid1,tid2;  
        cout<<"hello"<<endl;  
        pthread_create(&tid1,NULL,child1,NULL);  
        pthread_create(&tid2,NULL,child2,NULL);  
        sleep(10);  
        cout<<"main thread exit"<<endl;  
        return 0;  
  
}
2019-01-05 23:20
lxk1732942
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:281
专家分:182
注 册:2018-9-4
  得分:0 
回复 6楼 花脸
看上去不是很好理解...
为什么书中并没有介绍多线程知识
2019-01-06 01:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:172
帖 子:6436
专家分:28361
注 册:2014-5-20
  得分:0 
以下是引用lxk1732942在2019-1-5 22:59:56的发言:

两个线程,各自任务就只输出一行字符串就好了,不用复杂。

这个可能是最简单最简的了
两个线程的输入输出
#include <stdio.h>
#include <pthread.h>

void *_print(void *par)
{
    char k = (char)(*((char*)par));
    char ch;
    while ((ch=getch()) != '0')
        printf("%c %c\n", k, ch);
    return NULL;
}

int main(void)
{
    pthread_t t[2];
    char p[2]= {'a','b'};
    int i;
    for (i=0; i<2; ++i)
    {
        if(pthread_create(&t[i], NULL, _print, &p[i]) == -1)
        {
            printf("fail to create pthread t%d\n",i);
            exit(1);
        }
    }
    void * ret;
    for (i=0; i<2; ++i)
    {
        if(pthread_join(t[i], &ret) == -1)
        {
            printf("fail to recollect t%d\n",i);
            exit(1);
        }
    }
    return 0;
}
2019-01-06 05:19
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:757
专家分:734
注 册:2017-1-4
  得分:0 
回复 7楼 lxk1732942
你指的是哪本书?
2019-01-06 10:08
lxk1732942
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:281
专家分:182
注 册:2018-9-4
  得分:0 
回复 9楼 花脸
先是看了一本谭浩强的《C程序设计》(当然,这本书是公认的不好...),然后看了下《C Primer Plus》的目录,都没有找到这方面的介绍
2019-01-06 12:28







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040794 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved