gpt4 book ai didi

C - 如何同步访问连接句柄

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:46 25 4
gpt4 key购买 nike

想象一下这个场景,我有一个用 C 语言编写的适配器,用于将消息写入 SAP(调用 RFC)。

适配器仅在新消息到达“引擎”时调用,因此可以有长达 1 天或更长时间的无事件时间。这就是问题所在,连接句柄在 STANDARD 代码中的“低级套接字”层上变得无效/或者通过 SAP 本身的一些 SAP 参数可能会说“杀死不再事件的句柄”

所以我现在要做的是生成一个“位于适配器顶部”的线程,并且每 10 秒左右 PINGS SAP。这里的问题是我使用相同的连接句柄向 SAP 发送消息以及 PING/HEARTBEAT 消息。

SAP 对 RFC 句柄说:

"一个 RFC 句柄可以在多个线程中使用,但一次只能在一个线程中激活。一个 RFC 连接的 RFC 句柄,由一个线程创建,可以在另一个线程,但是这些线程必须同步对这个句柄的访问。"

但现在我已经尝试使用“pthread_mutex_lock”等来完成这项工作,但它没有。

我有一个全局“句柄”,当我的适配器 SHARED LIB 启动时,我启动一个线程,如下所示:

rc = pthread_create(&heartbeatThread, NULL, heartbeatThreadMainLoop, (void *)NULL);

而且这个线程每 10 秒左右 PING 一次 SAP。

在一个完美的世界中,我希望 SAP 的 MESSAGING 在这里优先,因此 PING 应该完全等到它“安静”,然后再次启动。

我看过如下链接:

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html#SYNCHRONIZATION

但我实际上想锁定/解锁一整段代码,所以正如我所说,如果 MESSAGE 进入 SAP PING 线程必须等待....但是如果 PING 线程忙我想以某种方式中断它并说“嘿,我需要那个连接句柄来发送消息”...

对此的最佳实践“模式”是什么?

非常感谢您的帮助

谢谢

林顿

最佳答案

可以通过增加 ADAPTER 的范围来简化整个架构。

与其主循环无限期地等待请求,不如让它在 10 秒后超时。如果超时,则执行唤醒逻辑。在任一情况下(请求或超时),重置计时器。

这避免了整个共享问题,并使 ADAPTER 负责与 SAP 的所有交互。

关于C - 如何同步访问连接句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com