小编dek*_*eko的帖子

多线程、并发和睡眠未按预期工作

我有一个非常简单的场景。以下方法尝试访问锁,等待 1 秒并最终释放锁。

private final Lock lock = new ReentrantLock();

public void lockAndWait() {

    logger.info("I {} am here", Thread.currentThread().getName());

    lock.lock();

    try {

        logger.info("I {} got the lock", Thread.currentThread().getName());

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在运行以下测试:

@Test
public void lockTest() {
    for (int i = 0; i < 10; i++) {
        new Thread(() -> lockAndWait()).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下日志输出:

12-10-2023 17:11:04 [Thread-2       ] INFO   I Thread-2 am here
12-10-2023 17:11:04 …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading sleep java-17

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

GenServer上的Elixir非阻塞线程?

我正在努力完成一项简单的任务,但我遇到了很大的困难.

请假设我有一个GenServer,其中一个回调如下:

  @impl true
  def handle_call(:state, _, state) do
    # Something that would require 10 seconds
    newState = do_job()
    {:reply, newState, newState}
  end
Run Code Online (Sandbox Code Playgroud)

如果我是对的,GenServer.call(:server, :state)从客户端调用会阻塞服务器10秒钟,然后新状态将返回给客户端.

好.我希望服务器在不被阻止的情况下处理此任务.我使用任务尝试过,但Task.await/2Task.yield/2阻塞服务器.

我希望服务器不要阻塞,并在那10秒后,在客户端终端上接收结果.这怎么可能?

multithreading nonblocking elixir gen-server

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

C增加int数组地址?

所以我有以下8个元素的int数组:

int v[8] = {0, 1, 2, 3, 4, 5, 6, 7};
Run Code Online (Sandbox Code Playgroud)

我将此数组作为循环中的参数传递给函数

while(i < N) {
    .
    .
    function(v);
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

在这个函数中我使用前4个元素,在下一个循环中我想增加数组地址4个位置,这样我就可以使用最后4个元素.因为int是4个字节,所以我想的是:

while(i < N) {
    .
    .
    function(v);
    .
    *v += 16;
}
Run Code Online (Sandbox Code Playgroud)

但是,这并没有达到我的预期.

注意:因为我正在使用嵌入式系统,所以我无法使用malloc.我的阵列必须以我相信的方式宣布.

问题(编辑):

如何增加我的数组的地址,以便第二次迭代v指向v [4]?

c arrays memory-address

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