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

标签 c

想象一下这个场景,我有一个用 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/

相关文章:

C 控制台 - 在同一行打印图案

c++ - 检查两个正则表达式是否相等/同构的库

c - 指向函数参数文档的 doxygen C 指针

c# - 有没有一种简单有效的方法可以在 C# 或 C/C++ 中列出所有 USB 设备?

当应用程序在 Solaris 上编译时,在 Linux 上使用 Valgrind 是否也有帮助?

c - 如何增加指针地址和指针的值?

c - 使用 gcc -O2 优化如何解决问题 : pointer pointing nothing and having integer value as -23 in it, 消失了?

c - 何时/如何释放从函数返回的指针

c - 如何使 readLine() 超时

c - 这个声明在 x86-64 上有什么问题?