标签: atomic

PHP -MySQL插入和选择语句 - 如何使它们成为原子?

我是PHP新手,我想知道如何克服这个看似简单的问题:

我有一个包含几个表的数据库.其中1个表称为"order_header".Order标头有一个名为"orderID"的字段,它是primaryKey并自动递增.OrderID用于数据库中的其他表(food_table,drinks_table,merchant_info,customer_info等),并且对于特定订单是唯一的.

现在我使用通常的INSERT语句将数据插入到order_header中,order_header生成一个新的orderID.但是现在我需要检索刚刚创建的orderID并使用它将数据插入到该数据库的其他表中.

问题是如何在一个原子方法中同时插入数据和检索生成的orderID?我不能使用mySQL查询来获取最后一个orderID,因为如果另一个线程同时在orderID中插入了一个条目.

在Java中我想可以使用锁和@synchronized这个词,但是如何在PHP中执行此操作?

php mysql insert atomic

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

为什么InterlockedCompareExchange不返回更改的值?

LONG __cdecl InterlockedCompareExchange(
  __inout  LONG volatile *Destination,
  __in     LONG Exchange,
  __in     LONG Comparand
);
Run Code Online (Sandbox Code Playgroud)

返回值
函数返回Destination参数的初始值。

只是好奇。
为什么InterlockedCompareExchange返回初始值?他们这样做是有原因的吗?

windows winapi synchronization atomic interlocked

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

从list array mongo获取mongo的记录

我用mongo,这里有一点问题.我想得到一条记录,但我只是在记录中有一个数组列表的id.这就是我的数据.

{    
   "_id": ObjectId("1113000001"),    
   "menu": "desertsunday",   
  "fruit": {
      "0": ObjectId("102b000000"),
      "1": ObjectId("5200000000"),
      "2": ObjectId("2900000000"),
      "3": ObjectId("9870000002")   } 
 }
Run Code Online (Sandbox Code Playgroud)

我只有102b000000用于获取记录,我需要从那里获取菜单但我无法用标准mongo获得它.有谁能够帮我 ?

arrays atomic mongodb

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

AtomicInteger不当行为

我有一个练习:给定一个AtomicIntegers矩阵(初始化为0),我必须为每一行运行一个线程,并为每一列的一个线程,在我减去1的行上,在我添加1的列上,所以在结束矩阵应保持原样.问题是矩阵发生了变化!下面是代码:该对象采用矩阵,一个布尔值,它将告诉他对列或行进行操作,以及它必须操作的列/行的索引.

import java.util.concurrent.atomic.AtomicInteger;

public class FifthExerciseSafe implements Runnable{
    private Thread thread;
    private boolean onRows;//tells if the object operates on the rows or on the columns
    private AtomicInteger[][] matrix;
    private int index;

public FifthExerciseSafe(AtomicInteger[][] matrix, boolean onRows, int index){
    this.matrix = matrix;
    this.onRows = onRows;
    this.index = index;
}

public void start(){
    thread = new Thread(this);
    thread.start();
}

public boolean isOnRows() {
    return onRows;
}

public void setOnRows(boolean onRows) {
    this.onRows = onRows;
}

public AtomicInteger[][] getMatrix() {
    return matrix;
} …
Run Code Online (Sandbox Code Playgroud)

java multithreading atomic

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

使用双重锁定实现读写锁

我编写了一个Java ReadWriteLock,读者使用双重检查锁定来获取写锁定.这是不安全的(对于具有延迟实例化的DCL的情况)?

import java.util.concurrent.atomic.AtomicInteger;

public class DCLRWLock {
    private boolean readerAcquiringWriteLock = false;
    private boolean writerLock = false;
    private AtomicInteger numReaders = new AtomicInteger();

    public void readerAcquire() throws InterruptedException {
        while (!nzAndIncrement(numReaders)) {
            synchronized (this) {
                if (numReaders.get() != 0)
                    continue;
                if (readerAcquiringWriteLock) {
                    do {
                        wait();
                    } while (readerAcquiringWriteLock);
                } else {
                    readerAcquiringWriteLock = true;
                    writerAcquire();
                    readerAcquiringWriteLock = false;
                    assert numReaders.get() == 0;
                    numReaders.set(1);
                    notifyAll();
                    break;
                }
            }
        }
    }

    public void readerRelease() {
        if (numReaders.decrementAndGet() == 0)
            writerRelease(); …
Run Code Online (Sandbox Code Playgroud)

java atomic thread-safety readwritelock double-checked-locking

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

我定义的cond函数无法正常工作(LISP)

我试图定义我自己的函数,使我的hw2更容易,但它不起作用.你能看看它并告诉我我错过了什么吗?

    (DEFUN testAL(x)
        COND ( ( ATOMP(x) ) 'this-is-an-atom )
             ( ( LISTP(x) ) 'this-is-a-list )
             ( T 'this-is-neither ) )
Run Code Online (Sandbox Code Playgroud)

我希望这个条件函数接受输入X并输出它是一个原子,列​​表,还是两者都没有.问题是,当我输入NIL时,我收到一个错误:尝试获取未绑定变量`COND'的值.

作业2包括以下问题:

以下哪一项是原子,哪些列表,哪两个都没有?

一个.零

湾 (例如10 3)

C.(AB)

d.64

即 Ť

F.(没有像家一样的地方)

G.'(+ 3 5 6)

lisp list atomic common-lisp conditional-statements

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

更新atomic <int>,我必须使用哪种内存排序?

我有一个atomic< int > position;,我想在同一个线程中增加一个:

void increasePosition()
{
    int temp;
    temp = position.load( memory_order_consume );
    position.store( ++temp, memory_order_release );
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做,还是我犯了错误?内存排序是否正确?

multithreading atomic c++11

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

Mongodb upsert 操作似乎不是原子的,它抛出 DuplicateKeyException

我有一个名为“msgdb”的 mongodb 数据库和一个名为“roster”的集合。'roster'中的文件如下:

{
  "userId": "sn99933289",
  "rosterGroups": [
    {
      "groupId": "242326",
      "groupName": "buddy",
      "rosterItems": [

      ]
    }
  ],
  "version": NumberInt(1)
}
Run Code Online (Sandbox Code Playgroud)

我将字段“_id”设置为分片键,如下所示:

db.runCommand({ shardcollection: "msgdb.roster", key:{ _id:"hashed" }})

调用 upsert 方法的 Java 代码:

import com.mongodb.BasicDBObject;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

    private void saveRoster(Roster roster) {
        BasicDBObject dbObject = new BasicDBObject();
        mongoTemplate.getConverter().write(roster, dbObject);
        dbObject.remove("version");
        dbObject.remove("_class");
        Update update = new Update();
        for (Map.Entry<String, Object> entry : dbObject.entrySet()) {
            update.set(entry.getKey(), entry.getValue());
        }
        update.inc("version", 1);
        Criteria criteria = Criteria.where("_id").is(roster.getUserId());
        Query query …
Run Code Online (Sandbox Code Playgroud)

atomic

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

原子 AddUint32 溢出

我正在使用以下代码在进程中获取唯一 ID:

for i := 0; i < 10; i++ {
    go func() {
        for {
            atomic.AddUint32(&counter, 1)
            time.Sleep(time.Millisecond)
        }
    }()
}
Run Code Online (Sandbox Code Playgroud)

如果计数器值超出 uint32 的限制会发生什么?

atomic integer-overflow go

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

并发非原子读/写是未定义的行为吗?

对 C++ 基本类型(多次读取和多次写入)的变量进行并发非原子读取和写入是 C++ 中的未定义行为吗?我不关心实际值,因为稍后我会发现是否发生了并发读/写,如果发生了,我会忽略当前值。我只想知道行为是否是定义良好的 C++?

如果是良好定义的,它仍然是良好定义的,如果线索1的读/写x和线程2的读/写y在,其中xy是如下的成员union

union {
  int x;
  double y;
};
Run Code Online (Sandbox Code Playgroud)

c++ concurrency atomic

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