标签: deadlock

MySQL 使用具有新值的索引发生死锁

桌子:

create table properties
(
  id              int auto_increment primary key,
  other_id        int          null
);

create index index_properties_on_other_id
  on properties (other_id);
Run Code Online (Sandbox Code Playgroud)

TX 1:

start transaction;
SET @last_id = 1;
delete from `properties` WHERE `properties`.`other_id` = @last_id;
INSERT INTO `properties` (`other_id`) VALUES (@last_id);
commit
Run Code Online (Sandbox Code Playgroud)

发射2:

start transaction;
SET @last_id = 2;
delete from `properties` WHERE `properties`.`other_id` = @last_id;
INSERT INTO `properties` (`other_id`) VALUES (@last_id);
commit
Run Code Online (Sandbox Code Playgroud)

假设在运行事务之前表是空的。

我的应用程序有 2 个用例。有时last_id已经被另一行使用,因此它会被优先索引;但有时它会由先前的插入查询在同一事务中生成,在这种情况下我会遇到死锁。

我需要运行这两个事务,直到删除语句之后。当我在 tx1 上运行 insert 时,它会等待获取锁,然后我在 tx2 上运行 insert,tx2 会出现死锁并回滚。

mysql            | …
Run Code Online (Sandbox Code Playgroud)

mysql database deadlock innodb

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

为什么 Helgrind 显示“违反锁定顺序”错误消息?

请看下面的代码

    #include <stdio.h>
    #include <pthread.h>
    #include <assert.h>
    #include <stdlib.h>

    pthread_mutex_t g = PTHREAD_MUTEX_INITIALIZER;
    pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
    pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;

    void* worker(void* arg) 
    {
        pthread_mutex_lock(&g);

        if ((long long) arg == 0) {
        pthread_mutex_lock(&m1);
        pthread_mutex_lock(&m2);
        } else {
        pthread_mutex_lock(&m2);
        pthread_mutex_lock(&m1);
        }
        pthread_mutex_unlock(&m1);
        pthread_mutex_unlock(&m2);

        pthread_mutex_unlock(&g);
        return NULL;
    }

    int main(int argc, char *argv[]) {
        pthread_t p1, p2;
        pthread_create(&p1, NULL, worker, (void *) (long long) 0);
        pthread_create(&p2, NULL, worker, (void *) (long long) 1);
        pthread_join(p1, NULL);
        pthread_join(p2, NULL);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Helgrind …

c multithreading valgrind deadlock pthreads

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

锁实现死锁

我有两个线程,一个 id 0,另一个 id 1。根据这些信息,我尝试构造一个锁,但似乎死锁,但我不明白为什么,有人可以帮助我吗?

我试图构建一个发生这种情况的场景,但这真的很难

  private int turn = 0;
  private boolean [] flag = new boolean [2];
   
  public void lock(int tid) {
    int other;
 
    other = (tid == 0) ? 1 : 0;

    flag[tid] = true;
    while (flag[other] == true) {
      if (turn == other) {
        flag[tid] = false;
        while (turn == other){}
        flag[tid] = true;
      }
    }
  }
 
  public void unlock(int tid) {
    //turn = 1-t;
    turn = (tid == 0) ? 1 : 0;
    flag[tid] = …
Run Code Online (Sandbox Code Playgroud)

java deadlock

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

为什么静态构造函数中的异步方法会导致死锁?

这是我正在研究的真实代码的最小(和简化)重现,因为它导致了死锁。有OuterClass一些嵌套类,它们通过外部类的初始化进行初始化(并加载一些数据)。重要的是,一旦对象初始化,数据就可用。

public class OuterClass
{   
    static ILogger Log = LogManager.GetLogger("OuterClass");

    private static InnerClass _innerClass;
    public static OuterClass Instance { get; private set; }

    private OuterClass()
    {
        Log.Debug("Constructor called");
        _innerClass = new InnerClass();
    }

    static OuterClass()
    {
        Instance = new OuterClass();
    }

    public class InnerClass
    {
        // using it's own logger, it will not dead lock
        //static ILogger Log = LogManager.GetLogger("InnerClass");

        private String _data;
        public InnerClass()
        {
            LoadOrUpdateDataAsync().Wait(); // will make the second Log.Debug call dead lock
            //_ = …
Run Code Online (Sandbox Code Playgroud)

.net c# deadlock nlog async-await

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

当我在 goroutine 中添加 select default 语句时通道死锁

我正在学习频道,下面是我尝试过的测试,但发生了死锁

func main() {
    ch := make(chan int)
    go func() {
        select {
        case ch <- 1:
            fmt.Println("send suc")
        default: // if comment this line, it will run smoothly
            fmt.Println("default")
        }
    }()
    time.Sleep(2) // do some time consuming thing...
    fmt.Printf("receive val: %d", <-ch)
}
Run Code Online (Sandbox Code Playgroud)

我预计不会出现僵局,但结果是:

default
fatal error: all goroutines are asleep - deadlock!
Run Code Online (Sandbox Code Playgroud)

但如果我删除defaultor time.Sleep(2),代码将顺利运行,结果:

send suc
receive val: 1
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会发生死锁吗?

deadlock channel go

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

当我尝试递归锁定互斥体时,没有发生死锁

为什么下面的代码不会死锁。

我尝试用cpp构造死锁情况,但是为什么下面的代码没有死锁

#include <iostream>
#include <memory>
#include <mutex>
#include <thread>

class Request {

public:
  void process() {
    std::lock_guard<std::mutex> lock(mutex_);
    print();
  }

  void print() {
    std::lock_guard<std::mutex> lock(mutex_);
    std::cout << "108392" << std::endl;
  }

private:
  std::mutex mutex_;
};

int main() {
  Request req;
  req.process();
}
Run Code Online (Sandbox Code Playgroud)

我希望我的代码陷入僵局

c++ mutex deadlock std

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

单个表上的SQL Server死锁问题

我有一个表,在sql server 2000中说"xxx".一个.exe通过sql job将数据插入到表"xxx"中.但是一旦插入数据,一个存储过程就是从"xxx表"读取数据并将其插入/更新到其他两个表中,并将状态更新回到同一个"xxx"表中.现在,客户端说在"xxx"表上发生了多个死锁.请友好地告诉我解决这个死锁问题的决议步骤以及如何逐步识别它.............

在此先感谢..... XXX

sql-server deadlock sql-server-2000

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

发生死锁时同时按下并从列表中弹出元素

以下代码的目的是像堆栈一样实现LIFO容器,而在检索元素时,它将检查列表中是否存在任何现有元素,或者它是否保留在检索元素的线程上,直到有新元素为止元素被插入.

public class Stack {

LinkedList list = new LinkedList();

public synchronized void push(Object x) {
    synchronized (list) {
        list.addLast(x);
        notify();
    }
}

public synchronized Object pop() throws Exception {
    synchronized (list) {
        if (list.size() <= 0) {
            wait();
        }
        return list.removeLast();
    }
}  
Run Code Online (Sandbox Code Playgroud)

}

但是每当调用pop()时List中没有元素,就会发生死锁.如何在避免数据死锁的同时修改此类以实现初始目的.谢谢

java stack deadlock

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

这是代码中的一种僵局吗?

当然,第二个循环永远不会被执行,但仍然很想知道以下示例是否可以归类为死锁.

public class Test {
    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i <= 10; i++)
            System.out.print(i + " ");

        Thread.currentThread().join();

        for (int i = 11; i <= 20; i++)
            System.out.print(i + " ");

    }
}
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization operating-system deadlock

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

请帮助我理解这个死锁示例

对于我的编程语言类,我们已经获得了一个简单的Java死锁示例,并被要求解决它.我不直接想要这个问题的答案,我主要想知道我的理解缺乏的地方.这是代码:

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// Attempt at a simple handshake.  Girl pings Boy, gets confirmation.
// Then Boy pings girl, get confirmation.
class Monitor {
   String name;

   public Monitor (String name) { this.name = name; }

   public String getName() {  return this.name; }

   // Girl thread invokes ping, asks Boy to confirm.  But Boy invokes ping,
   // and asks Girl to confirm.  Neither Boy nor Girl can give time to their
   // confirm call because …
Run Code Online (Sandbox Code Playgroud)

java multithreading deadlock

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