| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 399 人关注过本帖
标题:  求代码解释关于 线程的一些问题
只看楼主 加入收藏
钓鱼执法
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-1-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
  求代码解释关于 线程的一些问题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>

#define NT         16

pthread_mutex_t  mutt;//

int sum = 0;

void *worker(void *p);

int main(int arg, char *argv[])
{
  pthread_t thid[NT];//
  int id[NT];
  int i;

  for(i=0;i<NT;i++)
    id[i] = i;
  pthread_mutex_init(&mutt, 0);//
  for(i=0;i<NT;i++)
    pthread_create(&thid[i], 0, (void *) worker, (void *) &id[i]);//

  for(i=0;i<NT;i++)
    pthread_join(thid[i], 0);//

  printf("%d\n", sum);
}
void *worker(void *p)
{
  int i,tmp;

  pthread_mutex_lock(&mutt);//
  tmp = sum;
  for(i=0;i<1000;i++)
    ;
  tmp++;
  sum = tmp;
  pthread_mutex_unlock(&mutt);//
  return;
}
这个学期学习unix系统,线程这一块我没听懂。希望会的大神能给我解释下我标记//代码的意思。我在网上查了查资料,自己大概有些印象,但是还是希望朋友们能给我指点一下让我有个印证。谢谢大家。这绝不是作业帖,谢谢。
搜索更多相关主题的帖子: include 
2015-02-01 14:21
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:7 
没学过计算机操作系统么。知道什么是互斥么。你创建了一个互斥锁,但是却没有加锁,没有解锁,等于没用。代码如下:
程序代码:
void *worker(int *p)
{
    int tmp;
    int id;
    
    pthread_mutex_lock(&mutt);
    id = *p;
    if(id == 0){  /* adder */
        //tmp = answer;
        printf("%d\n",id);
        tmp = answer + C;
        answer = tmp;
    } else {
        printf("%d\n",id);
        tmp = A;
        tmp = tmp * B;
        answer = tmp;
    }
    pthread_mutex_unlock(&mutt);
    return NULL;
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-02 00:46
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>

#define NT         16

pthread_mutex_t  mutt;//定义锁指针

int sum = 0;

void *worker(void *p);

int main(int arg, char *argv[])
{
    pthread_t thid[NT];//定义线程数组
    int id[NT];
    int i;
   
    for(i=0;i<NT;i++)
        id[i] = i;
    pthread_mutex_init(&mutt, 0);//创建锁
    for(i=0;i<NT;i++)
        pthread_create(&thid[i], 0, (void *) worker, (void *) &id[i]);//创建线程
   
    for(i=0;i<NT;i++)
        pthread_join(thid[i], 0);//将线程加入运行队列
   
    printf("%d\n", sum);
}
void *worker(void *p)
{
    int i,tmp;
   
    pthread_mutex_lock(&mutt);//加锁
    tmp = sum;
    for(i=0;i<1000;i++)
        ;
    tmp++;
    sum = tmp;
    pthread_mutex_unlock(&mutt);//解锁
    return;
}
/*
 至于为什么要加锁,锁的作用,大哥,翻开你操作系统的书,好好看看进程同步的概念。
 因为现代CPU运行程序是不断的在切换当前所运行的程序,只是速度快到你根本就感觉不出来,
 其实这里的哲学思想很想离散数学和里的思想,其实世界是离散而不是连续的,所有的连续只是表象
 ,就如同高等数学的微积分,你看到的都是假的,卧槽扯太远了。总之你需要找本书
 好好补补计算机操作系统的进程同步这块的知识,还有CPU运行多道程序的本质。
 */

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-02 01:14
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>

#define NT         16

pthread_mutex_t  mutt;//定义锁指针

int sum = 0;

void *worker(void *p);

int main(int arg, char *argv[])
{
    pthread_t thid[NT];//定义线程数组
    int id[NT];
    int i;
    
    for(i=0;i<NT;i++)
        id[i] = i;
    pthread_mutex_init(&mutt, 0);//创建锁
    for(i=0;i<NT;i++)
        pthread_create(&thid[i], 0, (void *) worker, (void *) &id[i]);//创建线程
    
    for(i=0;i<NT;i++)
        pthread_join(thid[i], 0);//将线程加入运行队列
    
    printf("%d\n", sum);
}
void *worker(void *p)
{
    int i,tmp;
    
    pthread_mutex_lock(&mutt);//加锁
    tmp = sum;
    for(i=0;i<1000;i++)
        ;
    tmp++;
    sum = tmp;
    pthread_mutex_unlock(&mutt);//解锁
    return;
}
/*
至于为什么要加锁,锁的作用,大哥,翻开你操作系统的书,好好看看进程同步的概念。
因为现代CPU运行程序是不断的在切换当前所运行的程序,只是速度快到你根本就感觉不出来,
其实这里的哲学思想很想离散数学和里的思想,其实世界是离散而不是连续的,所有的连续只是表象
,就如同高等数学的微积分,你看到的都是假的,卧槽扯太远了。总之你需要找本书
好好补补计算机操作系统的进程同步这块的知识,还有CPU运行多道程序的本质。
*/

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-02 01:14
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:7 
所有线程的回调函数还都是一个,好废

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2015-02-02 15:30
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:7 
/*
 至于为什么要加锁,锁的作用,大哥,翻开你操作系统的书,好好看看进程同步的概念。
 */[/quote]

感觉你很牛逼→_→

授人以鱼,不如授人以渔
2015-02-03 10:23
快速回复:  求代码解释关于 线程的一些问题
数据加载中...
 
   



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

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