想象一下这个场景,我有一个用 C 语言编写的适配器,它将消息写入 SAP(调用 RFC)。
仅当新消息到达“引擎”时才调用适配器,因此最多可以有 1 天或更长时间没有活动。这就是问题所在,连接句柄在标准代码中的“低级套接字”层/或 SAP 本身上的某些 SAP 参数可能会说“不再活动的终止句柄”无效
所以我现在要做的是生成一个“位于适配器顶部”的线程,并且每 10 秒左右对 SAP 进行一次 PIN。这里的问题是我使用相同的连接句柄向 SAP 发送消息以及 PING / HEARTBEAT 消息。
SAP 对 RFC 句柄说:
"一个 RFC 句柄可以在多个线程中使用,但一次只能在一个线程中处于活动状态。由一个线程创建的 RFC 连接的 RFC 句柄可以在另一个线程中使用,但这些线程必须同步访问到这把柄。 ”
但是现在我尝试使用“pthread_mutex_lock”等来完成这项工作,但它没有。
我有一个全局“句柄”,当我的适配器 SHARED LIB 启动时,我启动一个线程,如下所示:
rc = pthread_create(&heartbeatThread, NULL, heartbeatThreadMainLoop, (void *)NULL);
而这个线程每隔 10 秒左右就对 SAP 进行一次 ping 操作。
在一个完美的世界里,我希望 MESSAGING to SAP 在这里优先,所以 PING 应该完全等到它“安静”然后重新启动。
我查看了以下链接:
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html#SYNCHRONIZATION
但我实际上想锁定/解锁整段代码,所以正如我所说,如果 MESSAGE 进入 SAP,PING 线程必须等待......但是如果 PING 线程很忙,我想以某种方式中断它并说“嘿,我需要那个连接句柄来发送消息”......
什么是最佳实践“模式”?
帮助将不胜感激
谢谢
林顿