写一个程序,里面有2个线程,线程A和B都打印共享的资源变量i,从1打印到50,交替完成 10
3个回答
展开全部
是要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();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |