Redian新闻
>
十一期我是歌手真不错。。。
avatar
十一期我是歌手真不错。。。# TVChinese - 中文电视
N*D
1
给个Lock w/ two atomic method lock() and unlock(),请用lock实现一个文件读写的
系统,要求:
1: reader blocks writer;
2: writer blocks reader;
3: writer blocks writer;
avatar
w*y
2
有什么好的建议吗?最好比较实用,小孩喜欢,又不怎么耽误学习的。
多谢啦!
avatar
s*s
3
徐佳莹的一无所有改编很有意思,但是第五竟然感觉也没太亏。
不过李克勤占了请来郎朗的便宜。
avatar
x*y
4
int numOfReaders = 0;
int numOfWriters = 0;
int numOfWaitingWriters = 0;
Lock aLock;
void read(...){
bool hasNotRead = true;
while(hasNotRead){
aLock.lock();
if(numOfWriters==0 && numOfWaitingWriters==0){
numOfReaders++;
hasNotRead = flase;
}
aLock.unlock();
}
............//open file and read
aLock.lock();
numOfReaders--;
aLock.unlock();
}
void write(...){
aLock.lock();
numOfWaitingWriters++;
aLock.unlock();
bool hasNotWrite = true;
while(hasNotWrite){
aLock.lock();
if(numOfWriters==0 && numOfReaders==0){
numOfWriters++;
hasNotWrite = false;
}
aLock.unlock();
}
.........//write to the file
aLock.lock();
numOfWriters--;
numOfWaitingWriters--;
aLock.unLock();
}

avatar
m*m
5
books
avatar
c*e
6
确实大招尽出呵,李克勤连朗朗都这么早搬出来了, 不知道总决赛会请来什么样的大
咖帮帮唱哈。
avatar
c*o
7
My 2 cents. 多个reader可以同时读;但假如有多个reader读时来了一个writer,则之
后的
reader不能再读,直到writer结束。
读文件:
FileLock.Readlock();
//read ...
FileLock.ReadUnlock();
写文件:
FileLock.WriteLock();
//write ...
FileLock.WriteUnlock();
class FileLock 如下:
class FileLock
{
private:
Lock m_ReadCounterLock;
Lock m_FileLock;
Lock m_writerWaitLock;
int m_ReaderCount;
public:
void ReadLock()
{
m_ReadCounterLock.lock();

// 如果有writer等,block
m_writerWaitLock.lock();
m_writerWaitLock.unlock();
if(m_ReaderCount == 0)
{
m_FileLock.lock();
}
m_ReaderCount ++;
m_ReadCounterLock.unlock();
}
void ReadUnlock()
{
m_ReadCounterLock.lock();

m_ReaderCount --;
if(m_ReaderCount == 0)
{
m_FileLock.unlock();
}
m_ReadCounterLock.unlock();
}
void WriteLock()
{
// lock m_writerWaitLock,之后的reader必须等
m_writerWaitLock.lock();
m_FileLock.lock();
}

void WriterUnlock()
{
m_FileLock().unlock();
m_writerWaitLock.unlock();
}
}



【在 N*D 的大作中提到】
: 给个Lock w/ two atomic method lock() and unlock(),请用lock实现一个文件读写的
: 系统,要求:
: 1: reader blocks writer;
: 2: writer blocks reader;
: 3: writer blocks writer;

avatar
H*u
8
一无所有不喜欢这么改。怪。朗朗比李克勤抢镜。高晓松唱得什么鬼

【在 s******s 的大作中提到】
: 徐佳莹的一无所有改编很有意思,但是第五竟然感觉也没太亏。
: 不过李克勤占了请来郎朗的便宜。

avatar
N*D
9
这个Lock用法不对呀,你只是用Lock保证了对Counter的Atomic访问,对于文件的读写
没有Lock呀。
比如先来个Writer,正写文件呢,前面对counter的update的lock都release了,又来个
writer,也进入Lock去,if statement一判断,啥也不用干,release lock,it也写文
件去了。呵呵。

int numOfReaders = 0;
int numOfWriters = 0;
int numOfWaitingWriters = 0;
Lock aLock;
void read(...){
bool hasNotRead = true;
while(hasNotRead){
aLock.lock();
if(numOfWriters==0 && numOfWaitingWriters==0){
numOfReaders++;
hasNotRead = flase;
}
aLock.unlock();
}
............//open file and read
aLock.lock();
numOfReaders--;
aLock.unlock();
}
void write(...){
aLock.lock();
numOfWaitingWriters++;
aLock.unlock();
bool hasNotWrite = true;
while(hasNotWrite){
aLock.lock();
if(numOfWriters==0 && numOfReaders==0){
numOfWriters++;
hasNotWrite = false;
}
aLock.unlock();
}
.........//write to the file
aLock.lock();
numOfWriters--;
numOfWaitingWriters--;
aLock.unLock();
}



【在 x***y 的大作中提到】
: int numOfReaders = 0;
: int numOfWriters = 0;
: int numOfWaitingWriters = 0;
: Lock aLock;
: void read(...){
: bool hasNotRead = true;
: while(hasNotRead){
: aLock.lock();
: if(numOfWriters==0 && numOfWaitingWriters==0){
: numOfReaders++;

avatar
c*y
10
对张信哲和老狼有点失望,有点尴尬。
徐佳莹唱一无所有期待了一下,但是没惊喜。觉得一般。也许黄致列唱这首会更好。
Coco和joey造型表演都好拼。加分。

【在 s******s 的大作中提到】
: 徐佳莹的一无所有改编很有意思,但是第五竟然感觉也没太亏。
: 不过李克勤占了请来郎朗的便宜。

avatar
N*D
11
非常接近了,不过Readlock里面对于writerWaitLock用法有些问题。lock总是为了lock
些什么东西,那个地方啥也没干,就是check一下,假设check当时没有waiting write
,check一结束就来了一个write呢?两个人就一块儿读写文件了。

My 2 cents. 多个reader可以同时读;但假如有多个reader读时来了一个writer,则之
后的
reader不能再读,直到writer结束。
读文件:
FileLock.Readlock();
//read ...
FileLock.ReadUnlock();
写文件:
FileLock.WriteLock();
//write ...
FileLock.WriteUnlock();
class FileLock 如下:
class FileLock
{
private:
Lock m_ReadCounterLock;
Lock m_FileLock;
Lock m_writerWaitLock;
int m_ReaderCount;
public:
void ReadLock()
{
m_ReadCounterLock.lock();

// 如果有writer等,block
m_writerWaitLock.lock();
m_writerWaitLock.unlock();
这个没啥意义,lock马上unlock,这个时候正好来个writer咋办?
if(m_ReaderCount == 0)
{
m_FileLock.lock();
}
m_ReaderCount ++;
m_ReadCounterLock.unlock();
}
void ReadUnlock()
{
m_ReadCounterLock.lock();

m_ReaderCount --;
if(m_ReaderCount == 0)
{
m_FileLock.unlock();
}
m_ReadCounterLock.unlock();
}
void WriteLock()
{
// lock m_writerWaitLock,之后的reader必须等
m_writerWaitLock.lock();
m_FileLock.lock();
}

void WriterUnlock()
{
m_FileLock().unlock();
m_writerWaitLock.unlock();
}
}


【在 c****o 的大作中提到】
: My 2 cents. 多个reader可以同时读;但假如有多个reader读时来了一个writer,则之
: 后的
: reader不能再读,直到writer结束。
: 读文件:
: FileLock.Readlock();
: //read ...
: FileLock.ReadUnlock();
: 写文件:
: FileLock.WriteLock();
: //write ...

avatar
c*y
12
朗朗表演真不错。就是好像又胖了点。
见过一次真人表演,很年轻和气,和这个感觉不太一样。

【在 c******e 的大作中提到】
: 确实大招尽出呵,李克勤连朗朗都这么早搬出来了, 不知道总决赛会请来什么样的大
: 咖帮帮唱哈。

avatar
x*y
13
If the first writer is writing, numOfWriters is not 0, then the 2nd writer
will be stuck in while loop and won't be able to write file; maybe not
efficient, but should work.

【在 N*D 的大作中提到】
: 这个Lock用法不对呀,你只是用Lock保证了对Counter的Atomic访问,对于文件的读写
: 没有Lock呀。
: 比如先来个Writer,正写文件呢,前面对counter的update的lock都release了,又来个
: writer,也进入Lock去,if statement一判断,啥也不用干,release lock,it也写文
: 件去了。呵呵。
:
: int numOfReaders = 0;
: int numOfWriters = 0;
: int numOfWaitingWriters = 0;
: Lock aLock;

avatar
c*o
14

lock
write
这种情况下,reader和writer会继续竞争m_FileLock, 只有一个能拿到。

【在 N*D 的大作中提到】
: 非常接近了,不过Readlock里面对于writerWaitLock用法有些问题。lock总是为了lock
: 些什么东西,那个地方啥也没干,就是check一下,假设check当时没有waiting write
: ,check一结束就来了一个write呢?两个人就一块儿读写文件了。
:
: My 2 cents. 多个reader可以同时读;但假如有多个reader读时来了一个writer,则之
: 后的
: reader不能再读,直到writer结束。
: 读文件:
: FileLock.Readlock();
: //read ...

avatar
j*u
15
给点提示?
lock没有count,不是semaphore,也不是event,怎么做到all readers/one writer
finish了unblock one writer, all writer finish了 unblock all readers?

写的

【在 N*D 的大作中提到】
: 给个Lock w/ two atomic method lock() and unlock(),请用lock实现一个文件读写的
: 系统,要求:
: 1: reader blocks writer;
: 2: writer blocks reader;
: 3: writer blocks writer;

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。