小编fra*_*sti的帖子

避免 pthread_cond_wait 和 pthread_cond_signal 时发生死锁

我有一个关于使用 pthread 条件变量的问题。一般用例是这样的

//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);

//thread 2:
pthread_cond_signal(&cond);  
Run Code Online (Sandbox Code Playgroud)

现在我知道 pthead_cond_wait 将解锁互斥体并进入睡眠状态,唤醒时它将锁定互斥体,然后从调用返回,但如何确保线程 1 处于条件等待状态后来自线程 2 的信号到达线程 1。可能会出现线程 2 先运行然后线程 1 导致唤醒丢失的情况。

如果我再次在线程 2 中使用互斥锁,那么线程 2 也可能会获得锁,它会发出信号,而线程 1 仍在尝试获取锁。这将再次导致唤醒丢失。

如何确保来自条件变量的信号到达等待该信号的线程?

谢谢

c++ pthreads

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

如何将 Flux 的每个元素与需要元素属性的另一个 Flux 组合起来

我有一个关于 Spring WebFlux 和 Reactor 的问题。我正在尝试编写一个简单的场景,其中在 GET 端点中,我返回代表实体的 DTO Flux,并且每个实体都有代表另一个实体的其他 DTO 的集合。这里请遵循详细信息。

我有两个实体,Person 和 Song,定义如下:

@Data
public class Person {
    @Id
    private Long id;
    private String firstName;
    private String lastName;
}

@Data
public class Song {
    @Id
    private Long id;
    private String title;
    private Long authorId;
}
Run Code Online (Sandbox Code Playgroud)

这些实体由以下 DTO 表示:

@Data
public class SongDTO {
    private Long id;
    private String title;
    public static SongDTO from(Song s) {
        // converts Song to its dto
    }
}

@Data
public class PersonDTO { …
Run Code Online (Sandbox Code Playgroud)

java project-reactor spring-webflux

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

标签 统计

c++ ×1

java ×1

project-reactor ×1

pthreads ×1

spring-webflux ×1