写一个程序,里面有2个线程,线程A和B都打印共享的资源变量i,从1打印到50,交替完成 10

 我来答
瓶子快到碗里来
2013-12-07 · TA获得超过238个赞
知道答主
回答量:247
采纳率:0%
帮助的人:140万
展开全部

是要java的么?

运行结果部分截图

public class ThreadSolution {

static int i=0;
boolean flag=true;
static ThreadSolution ts=new ThreadSolution();
public static void main(String[] args) {


new Thread()
{

public void run() {
for(int i=0;i<25;i++)
{
//System.out.println("add---"+i);
ts.add();
}


}

}.start();

//**********

new Thread()
{

public void run() {
for(int i=0;i<25;i++)
{
//System.out.println("add1---"+i);
ts.add1();
}


}

}.start();

}
public void add()
{ synchronized (ts) {


while(!flag)//此处一定要用while来判断,防止虚假唤醒!导致阻塞!
{
try {
wait();
} catch (InterruptedException e) {

e.printStackTrace();
}
}
if(flag)
{

i++;
System.out.println(Thread.currentThread().getName()+"---"+"i:"+i);
flag=false;
notifyAll();


}
}
}
public void add1()
{
synchronized (ts) {


while(flag)
{
try {
wait();
} catch (InterruptedException e) {

e.printStackTrace();
}
}
if(!flag)
{

i++;
System.out.println(Thread.currentThread().getName()+"---"+"i:"+i);
flag=true;
notifyAll();


}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
798348428
2013-12-02 · TA获得超过886个赞
知道小有建树答主
回答量:567
采纳率:0%
帮助的人:388万
展开全部
#include <stdio.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-02
展开全部
#include <windows.h>
#include <stdio.h>
#include <process.h>
int var;
typedef struct
{
    HANDLE wait;
    HANDLE set;
} threadParam;
DWORD CALLBACK ThreadFunc(threadParam* p)
{
    for(;;) {
        WaitForSingleObject(p->wait, INFINITE);
        ResetEvent(p->wait);
        ++var;
        if (var > 50) break;
        printf("%d\n", var);
        SetEvent(p->set);
    }
    SetEvent(p->set);
    return 0;
}
int main()
{
    HANDLE t1, t2;
    threadParam p1, p2;
    var = 0;
    p1.wait = p2.set = CreateEvent(0, TRUE, FALSE, 0);
    p2.wait = p1.set = CreateEvent(0, TRUE, FALSE, 0);
    t1 = (HANDLE) _beginthreadex(0, 0, (unsigned int (__stdcall *)(void *))ThreadFunc, &p1, 0, 0);
    t2 = (HANDLE) _beginthreadex(0, 0, (unsigned int (__stdcall *)(void *))ThreadFunc, &p2, 0, 0);
    SetEvent(p1.wait);
    WaitForSingleObject(t1, INFINITE);
    WaitForSingleObject(t2, INFINITE);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式