![]() |
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。
|
|
Googleのunix.com
|
|||||||
| HP - UX HP - UXの(ヒューレットパッカードのUNIX )のHewlett - PackardのUNIXオペレーティングシステムの独自の実装、システムの五に基づい |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| ファイル内の重複を避ける | pssandeep | UNIXのダミー質問と回答のため | 7 | 2008年3月26日 06:36午前 |
| Awkの:どのようにシステムを避けるために | sandeep_hi | シェルプログラミングとスクリプティング | 0 | 2006年6月23日 06:01午前 |
| どのようにコマンドをhistoryingを避けるために | ting123 | UNIXのダミー質問と回答のため | 2 | 2006年5月6日 04:58午前 |
| 松のスパムを避けるか? | a25khan | UNIXのダミー質問と回答のため | 1 | 2003年12月13日 10:50午前 |
| どのようロックコマンドを使用せずに、キーボードをロックする | dianayun | UNIXのダミー質問と回答のため | 7 | 2002年6月21日 06:05午後 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
semphoreロックを避ける
我々のアプリケーションのため、一般的に、すべてが、通常の仕事は、デッドロックの原因はほとんどのV semphoreインタフェースシステムのセットを開発しました。ここにいくつかの重要なsem_waitとsem_postインターフェイスは、いくつかの提案は、デッドロックの問題が修正plsをポイント:
コード:
int sem_wait_V(int id, struct sembuf *sem_pv)
{
sem_pv = new struct sembuf [1] ;
if (sem_op(id,-1, sem_pv)<0)
{
delete sem_pv ;
return -1;
}
delete sem_pv ;
return 0;
}
int sem_post_V(int id, int sem_post_value_V, struct sembuf *sem_pv)
{
if ((sem_post_value_V = semctl(id,0,GETVAL,0)) <0)
{
return -1;
}
if( sem_post_value_V > SEM_POST_LIMIT )
{
if( sem_post_value_V == SEM_POST_LIMIT + 1 ) return -1 ;
return -1 ;
}
sem_pv = new struct sembuf [1] ;
if (sem_op(id,1,sem_pv)<0)
{
delete sem_pv ;
return -1;
}
delete sem_pv ;
return 0;
}
int sem_op(int id,int value, struct sembuf sem_pv[1] )
{
int sem_value ,sem_value1;
sem_pv[0].sem_num = 0 ;
sem_pv[0].sem_flg = 0 ;
if ((sem_pv[0].sem_op =value) == 0)
{
printf("sem_op error: operator is zero !!!!!!!(%d)\n",id) ;
return -1;
}
if ((sem_value = semctl(id,0,GETVAL,0)) <0)
{
perror("semctl create GETVAL");
return -1;
}
again:;
if (semop(id,&sem_pv[0],1)<0)
{
sched_yield() ;
if(errno==EINTR)
{
if ((sem_value1 = semctl(id,0,GETVAL,0)) <0)
{
perror("semctl create GETVAL");
return -1;
}
else
{
if (sem_value != sem_value1 )
return -1;
else
goto again;
}
}
return -1;
}
return 1;
}
編集Frank2004で最終; 2008年2月3日に 11:06午後.. |