【问题标题】:Why called "ABA_problem"?为什么叫“ABA_problem”?
【发布时间】:2014-01-17 03:33:55
【问题描述】:

今天我知道了 ABA 问题。

http://en.wikipedia.org/wiki/ABA_problem

对了,突然间,我就想知道为什么叫“ABA”的问题?缩写?

【问题讨论】:

  • 值从 A 变为 B,然后又变为 A。因此,ABA。 Wikipedia 上的示例已经使用 A 和 B 来描述值。

标签: algorithm terminology


【解决方案1】:

ABA 不是首字母缩写词,它是一种简写方式,用于说明某个值 共享位置可以从 A 更改为 B,然后返回 A :)

【讨论】:

    【解决方案2】:

    假设你有两个线程,一个是检查一个全局字符是否有新数据:

    char flag = 'n';
    
    void alarms(){
        while(true){
            if(flag == 'f'){
                start_fire_alarm();
            }
            /* ... some other things, including some waiting ...*/
        }
    }
    
    void sensors(){
        while(true){
            if(sensor_alerts_fire()){
                flag = 'f';
            } else {
                flag = 'n';
            }
        }
    }
    

    现在alarm 检查标志,看到'n',一切都很好。突然,一场大火开始了,sensors 将标志设置为'f'。但是在操作系统给alarm 一些反应时间之前,物理传感器就坏了,它们不再警告火灾。 sensors() 再次将标志设置为'n',操作系统给alarm() 一些时间,但没有任何反应。

    这是 ABA 问题(好吧,在我们的例子中是 NFN)。您不会在第一个线程中注意到您的共享值在两者之间发生了变化,尽管这可能很关键。请注意,您可以将 char 与某些原子类型交换,并将所有分配/测试与原子类型交换,问题仍然是相同的。

    【讨论】:

      【解决方案3】:

      据我所知,问题与线程交错有关。所以我认为它是交错的简短文本表示。先运行一个线程A,然后切换到线程B,再回到线程A。

      【讨论】:

        猜你喜欢
        • 2012-08-17
        • 1970-01-01
        • 2011-08-20
        • 2010-11-19
        • 2016-12-12
        • 2010-10-09
        • 2011-09-30
        • 2016-06-15
        • 2013-05-05
        相关资源
        最近更新 更多