双java 线程同步拷贝: 同步读写,一个java 线程同步用来读数据,一个用写数据;

VC知识库:两个线程访问同一个数组,一个线程只读,一个线程只写,有什么好的办法解决数据共享冲突的问题
主&&&&&&题: 两个线程访问同一个数组,一个线程只读,一个线程只写,有什么好的办法解决数据共享冲突的问题
作&&&&&&者: dpf_eei
回复次数: 6
正文内容: 无
回复人: xulili 20:09:12
加锁不就行了。
回复人: little_white 20:11:31
典型的生产者与消费者问题
回复人: dpf_eei 20:15:57
我是想读线程在读数据时如果这个数据正被另一个线写,则读到被写之前的数据而不是等写线程把数据写完才能读。
回复人: zsbs 21:20:15
Re:两个线程访问同一个数组,一个线程只读,一个线程只写,有什么好的办法解决数据共享冲突的问题voliate BOOL CanWriting=FALSE;//全局变量
voliate BOOL IsRead=FALSE
ReadThread
&&&&while(CanWriting);//如果写,则等待
&&&&//在此读
&&&&CanWriting=TRUE
writeThread
&&&& if(CanWriting)
&&&&&&&& //在此写
&&&& CanWriting=FALSE;//可以读
回复人: ray2003 7:41:09
Re:我是想读线程在读数据时如果这个数据正被另一个线写,则读到被写之前的数据而不是等写线程把数据写完才能读。这个除了写线程将数据进行备份之外没有办法了吧!
有点向ADO的做法
回复人: ray2003 7:43:14
Re:Re:两个线程访问同一个数组,一个线程只读,一个线程只写,有什么好的办法解决数据共享冲突的问题回 zsbs (书生):
按照後捷的说法,你不能自己定义一个变量作为“锁”,因为if(CanWriting)的时候可能会发生线程切换。正确的做法是必须使用系统提供的互斥量作为“锁”。已经封装了一个线程来处理读写数据的串口类CSerialIO_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
已经封装了一个线程来处理读写数据的串口类CSerialIO
已​经​封​装​了​一​个​线​程​来​处​理​读​写​数​据​的​串​口​类​C​S​e​r​i​a​l​I​O
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢扫描二维码,关注牛客网
扫一扫,把题目装进口袋java实现有两个子线程(同步),一个是向队列加数据,一个是取,再用一个主线程(一直走)开启这两个子线程,
java实现有两个子线程(同步),一个是向队列加数据,一个是取,再用一个主线程(一直走)开启这两个子线程, 20
这是是启动了两个线程,一个线程负责添加,一个负责读取数据,输入end时停止线程
刚才测试了一下,发现一个bug,重新修改修改了下,只是代码package com.gz.import java.util.Spublic class Main { public static String value = "";//初始值 public static Thread add, public static void main(String[] args) {//主线程
add=new Thread(new add());
add.start();//启动添加
get=new Thread(new get());
get.start();//启动获取 } static class add implements Runnable {//添加操作
public void run() {
while (!Main.value.equals("end")) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
Main.value = scanner.next();
Thread.yield();
} } static class get implements Runnable {//读取操作
public void run() {
while (!Main.value.equals("end")) {
if (!Main.value.equals("")&&!Main.value.equals("end")) {
System.out.println("您刚才输入的数是:" + Main.value);
Main.value="";
}else if(Main.value.equals("end")){
package com.gz.import java.util.Spublic class Main { public static String value = "";//初始值 public static Thread add, public static void main(String[] args) {//主线程
add=new Thread(new add());
add.start();//启动添加
get=new Thread(new get());
get.start();//启动获取 } static class add implements Runnable {//添加操作
public void run() {
while (!Main.value.equals("end")) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
Main.value = scanner.next();
Thread.yield();
} } static class get implements Runnable {//读取操作
public void run() {
while (!Main.value.equals("end")) {
if (!Main.value.equals("")&&!Main.value.equals("end")) {
System.out.println("您刚才输入的数是:" + Main.value);
Main.value="";
}else if(Main.value.equals("end")){
也可以把main那里改为public static void main(String[] args) {//主线程
new Thread(new add()).start();//启动添加
new Thread(new get()).start();//启动获取 }public static Thread add,可以删除
提问者 的感言:当代劳模!所有人都应该向你学习!
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号

我要回帖

更多关于 c 多线程读写文件 的文章

 

随机推荐