| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 307 人关注过本帖
标题:线程互斥问题
只看楼主 加入收藏
aa25693592
Rank: 1
等 级:新手上路
帖 子:39
专家分:4
注 册:2012-9-13
结帖率:73.33%
收藏
已结贴  问题点数:11 回复次数:1 
线程互斥问题
#include<windows.h>
#include<stdio.h>
int ThreadData=1;
int n;
DWORD    f,f1,f2=1;
CRITICAL_SECTION csPrint;  // 声明一个临界区
//HANDLE hmutex; //互斥信号量
void Print(char *str)  
{
    //EnterCriticalSection(&csPrint); // 进入临界区
    for (;*str != '\0';str++)
    {
        Sleep(5000);
        printf("%c",*str);
    }
    printf("\n");
//    LeaveCriticalSection(&csPrint); // 退出临界区
}
DWORD WINAPI ThreadProcess(LPVOID lpParameter)
{
    //WaitForSingleObject(hmutex,INFINITE);
    printf("This is Sub Thread!\n");
    for(int i=1;i<=n;i++)
    {
        f2=f2*i;
        printf("f2[%d]=%d\n",i,f2);
    }
    printf("\n");
    ThreadData=0;
    //ReleaseMutex(hmutex);
    return 0;
}
int main()
{
    HANDLE hThread;
    DWORD ThreadID;
    InitializeCriticalSection(&csPrint); // 初始化临界区
    printf("请输入一个小于20的正整数:");
    scanf("%d",&n);
//    WaitForSingleObject(hmutex,INFINITE);  //等待互斥对象
    for(int i=1,f1=0;i<=n;i++)
    {
        f1=f1+i;
        printf("f1[%d]=%d\n",i,f1);
    }
    printf("\n");
//    ReleaseMutex(hmutex);
    hThread=CreateThread(NULL,0,ThreadProcess,NULL,0,&ThreadID);//创建一个新的线程
    while (ThreadData)
    {
        Print("Main Thread is waiting for Sub Thread!\n");
        //Sleep(600);
    }
    f=f1+f2;
    printf("The sum is %d\n",f);
    Sleep(1000);
    return 0;
}
i是主线程和子线程共同访问的量,为什么主线程和子线程之间没有进行互斥操作  但是它们输出的结果并没有错误呢?求大神们给小弟说一下
搜索更多相关主题的帖子: void 声明 include 
2013-01-02 22:49
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6814
专家分:42393
注 册:2010-12-16
收藏
得分:11 
你在子线程中计算的是f2,在主线程计算的是f1;并且主线程计算完成f1 后一直在等子线程---while (ThreadData)

while (threaddata)完成之后,子线程已经计算完毕了,所以计算式没有错误的。他们访问的资源并没有冲突

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-03 01:16
快速回复:线程互斥问题
数据加载中...
 
   



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

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