シナリオを描くと、SAPにメッセージを書き込む(RFCを呼び出す)Cで書かれたADAPTERがあります。C - 接続ハンドルへのアクセスを同期する方法
アダプターは、新しいメッセージが「エンジン」に到着したときにのみ呼び出されるため、最大で1日以上の活動がない期間を持つことができます。これは問題が発生する場所で、接続ハンドルはSTANDARDコードの「低レベルソケット」レイヤーで無効になります。または、SAP自体の「無効なハンドルを強制終了」と言う可能性のあるSAPパラメータによって無効になります。
So私が今行っているのは、「アダプターの上に座っている」スレッドと10秒ごとにPING SAPというスレッドです。ここでの問題は、PING/HEARTBEATメッセージと同様に、SAPにメッセージを送信するためにSAME接続ハンドルを使用していることです。
SAPはRFCハンドルのために言う:
「AN RFCハンドルは、複数のスレッドで使用できますが、一度に1つのスレッドでアクティブにできる1で作成されたRFC接続のRFCハンドル、。スレッドは 別のスレッドで使用することができますが、これらのスレッドは、このハンドルへのアクセスを同期する必要があります。」
しかし、今私が使って試してみました 『この作品を作るためには、pthread_mutex_lock』などが、それはしません。
私は1 GLOBAL "ハンドル" を持っている、と私のアダプタSHARED LIBの起動時に、私は次のようなスレッドを起動:
RC =のpthread_create(& heartbeatThread、NULL、heartbeatThreadMainLoop、(void *型)NULL)を。
このスレッドは10秒ごとにPING SAPするだけです。
完璧な世界では、ここではSAPへのメッセージングを優先させたいので、PINGは静かになるまで待ってからもう一度起動する必要があります。
私のようなリンクを見てきました:
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html#SYNCHRONIZATION
しかし、私は、メッセージがSAPに起こっている場合はPINGのスレッドが待機しなければならないと述べたように、私は実際には、コードのセクション全体をロック/アンロックしたいです... PINGスレッドがビジー状態の場合は、何とか中断して「やあ、メッセージングの接続ハンドルが必要だ」と言いたいのですが...
このためのベストプラクティスは何ですか?
とヘルプは非常全体のアーキテクチャは、アダプタの範囲を増やすことで簡略化することができ
リントン
'pthread_mutex_lock'を使ってコードを表示してください。 –