小编Bob*_*tys的帖子

分布式并发控制

我已经在这方面工作了几天,我找到了几个解决方案,但没有一个简单或轻巧.问题基本上是这样的:我们有一个由10台机器组成的集群,每台机器在多线程ESB平台上运行相同的软件.我可以很容易地处理同一台机器上的线程之间的并发问题,但是对于不同机器上的相同数据的并发性呢?

本质上,软件接收通过Web服务将客户数据从一个企业提供给另一个企业的请求.但是,客户可能存在或可能不存在于另一个系统上.如果没有,我们通过Web服务方法创建它.所以它需要一种测试和设置,但我需要某种形式的信号量来锁定其他机器导致竞争条件.我曾经遇到过为一个本地客户创建两次远程客户的情况,这是不太理想的.

我从概念上玩弄的解决方案是:

  1. 使用我们的容错共享文件系统创建"锁定"文件,每个机器将根据客户检查这些文件

  2. 在我们的数据库中使用一个特殊的表,并锁定整个表,以便为锁记录进行"测试和设置".

  3. 使用Terracotta,一种开源服务器软件,有助于扩展,但使用中心辐射模型.

  4. 使用EHCache同步复制我的内存"锁".

我无法想象我是唯一一个遇到过这种问题的人.你是怎么解决的?你在内部做饭还是有最喜欢的第三方产品?

java concurrency scaling terracotta load-balancing

54
推荐指数
2
解决办法
2万
查看次数

C/PHP中的复合布尔表达式和变量赋值

请原谅我,如果标题与我要求的完全不符,那我就很难准确地描述这个问题.

请考虑以下PHP代码:

#!/usr/bin/php
<?php
class foo{
    function bar()
    {
        return true;
    }
}
if (true && $a = new foo() && $a->bar()) {
    echo "true";
} else {
    echo "false";
}
Run Code Online (Sandbox Code Playgroud)

它给

Fatal error: Call to a member function bar() on a non-object
Run Code Online (Sandbox Code Playgroud)

对于$ a-> bar(); 表达.

考虑以下C代码:

int main(void)
{
    int i = 0;

    if (i += 1 && printf("%d\n", i))
    {
        printf("Done: %d.\n", i);
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

0
Done: 1.
Run Code Online (Sandbox Code Playgroud)

为什么是这样?由于C和PHP声称要将这些表达式短路并从左到右进行求值,因此我希望在左边的表达式中设置的值设置在右边的表达式中.有什么我想念的吗?

php c operators

0
推荐指数
1
解决办法
1071
查看次数

标签 统计

c ×1

concurrency ×1

java ×1

load-balancing ×1

operators ×1

php ×1

scaling ×1

terracotta ×1