m**********j 发帖数: 610 | 1 不一定是对同一个object写
比如说2个vector,V1.push_back(1)和V2.push_back(2)先后执行,2个push_back要么
同时成功要么同时失败,这个怎么实现? |
w***g 发帖数: 5958 | 2 写了半天,决定不毒害你了。自己看wiki。
https://en.wikipedia.org/wiki/Transaction_processing
发明这个的人得了图灵奖。这问题要是你自己提出来的,那很了不起。
【在 m**********j 的大作中提到】 : 不一定是对同一个object写 : 比如说2个vector,V1.push_back(1)和V2.push_back(2)先后执行,2个push_back要么 : 同时成功要么同时失败,这个怎么实现?
|
m**********j 发帖数: 610 | 3
汗,我是菜鸟,只是刷题的时候想到的
有的题需要同时maintain 2个数据结构,万一更新完其中一个,另外一个更新失败了,
所有后续操作就全乱了
好像所有rollback都是讲数据库的啊,有普通数据结构的rollback吗
【在 w***g 的大作中提到】 : 写了半天,决定不毒害你了。自己看wiki。 : https://en.wikipedia.org/wiki/Transaction_processing : 发明这个的人得了图灵奖。这问题要是你自己提出来的,那很了不起。
|
f*******t 发帖数: 7549 | 4 database里一般来说做完最后一步后commit,比较常见的是用MVCC
https://en.wikipedia.org/wiki/Multiversion_concurrency_control ),
transaction没commit之前,其它thread或client不会看到被更改的部分。 |
m**********j 发帖数: 610 | 5
如果不是数据库,只是普通的几行代码,要么都执行要么都不执行,有办法吗
【在 f*******t 的大作中提到】 : database里一般来说做完最后一步后commit,比较常见的是用MVCC : https://en.wikipedia.org/wiki/Multiversion_concurrency_control ), : transaction没commit之前,其它thread或client不会看到被更改的部分。
|
f*******t 发帖数: 7549 | 6 lock呗
【在 m**********j 的大作中提到】 : : 如果不是数据库,只是普通的几行代码,要么都执行要么都不执行,有办法吗
|
n******t 发帖数: 4406 | 7 這就是當前計算機教學的杯具,學了一大堆名詞。
結果就是,一件事情,自己都沒想清楚要幹什麼,先用一堆自己都沒搞清楚的名詞,
把自己搞糊塗。
【在 m**********j 的大作中提到】 : 不一定是对同一个object写 : 比如说2个vector,V1.push_back(1)和V2.push_back(2)先后执行,2个push_back要么 : 同时成功要么同时失败,这个怎么实现?
|
m**********j 发帖数: 610 | 8
大牛,说得通俗易懂一点吧,真心求教
比如说leetcode的min stack,不是要同时维护2个stack吗,刚操作完其中一个,第2个
由于各种原因没执行成功,后面所有结果不就都是错的吗,那只有undo第一个,就是问
有没有一个general的方法实现这个
【在 n******t 的大作中提到】 : 這就是當前計算機教學的杯具,學了一大堆名詞。 : 結果就是,一件事情,自己都沒想清楚要幹什麼,先用一堆自己都沒搞清楚的名詞, : 把自己搞糊塗。
|
t*****n 发帖数: 2578 | 9 general办法就是搞个lock。先锁,然后修改几个数据结构,然后解锁。
这不是基本用法么?java里的synchronized block |
w**z 发帖数: 8232 | 10 https://en.wikipedia.org/wiki/Software_transactional_memory
【在 t*****n 的大作中提到】 : general办法就是搞个lock。先锁,然后修改几个数据结构,然后解锁。 : 这不是基本用法么?java里的synchronized block
|
|
|
t*****n 发帖数: 2578 | |
l**********0 发帖数: 150 | 12 自定义stack,让push返回boolean
synchronize{
if(myStack1.push(a)){
if(!myStack2.push(b)){
myStack1.pop();
}
}
} |
g****y 发帖数: 2810 | 13 内存操作失败,这是bug必须改,8成是野指针,2成是内存没释放。
【在 m**********j 的大作中提到】 : : 大牛,说得通俗易懂一点吧,真心求教 : 比如说leetcode的min stack,不是要同时维护2个stack吗,刚操作完其中一个,第2个 : 由于各种原因没执行成功,后面所有结果不就都是错的吗,那只有undo第一个,就是问 : 有没有一个general的方法实现这个
|
g****t 发帖数: 31659 | 14 作为逻辑学家,我觉得只要想办法让这两个指令都同时失败,
那么就满足了他说的:同时成功 OR 同时失败
所以当编译器看到第一条命令的时候,
把电源关了就可以了。这就达到了同时失败的目的。
【在 w***g 的大作中提到】 : 写了半天,决定不毒害你了。自己看wiki。 : https://en.wikipedia.org/wiki/Transaction_processing : 发明这个的人得了图灵奖。这问题要是你自己提出来的,那很了不起。
|
g****t 发帖数: 31659 | 15 第一个数据结构可能更新失败,你要解决这个问题,对吗?
其实这个问题是严格情况下无解的。因为你这个先后什么的自己有矛盾。
但是可以想办法减少损失。例如你开100个线程,把
第一个操作更新100 次,用成功的那次,这就减少了失败的可能。
不用锁内存什么的
【在 m**********j 的大作中提到】 : : 大牛,说得通俗易懂一点吧,真心求教 : 比如说leetcode的min stack,不是要同时维护2个stack吗,刚操作完其中一个,第2个 : 由于各种原因没执行成功,后面所有结果不就都是错的吗,那只有undo第一个,就是问 : 有没有一个general的方法实现这个
|
g*********e 发帖数: 14401 | |
g****t 发帖数: 31659 | 17 我写过用在海量设备上的atomic read什么的C代码。
如果是硬件相关的这类问题,能不搞高能技术
尽量不要搞,那个不是一般人玩的。
【在 g****t 的大作中提到】 : 第一个数据结构可能更新失败,你要解决这个问题,对吗? : 其实这个问题是严格情况下无解的。因为你这个先后什么的自己有矛盾。 : 但是可以想办法减少损失。例如你开100个线程,把 : 第一个操作更新100 次,用成功的那次,这就减少了失败的可能。 : 不用锁内存什么的
|