⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globcnt.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// globcnt.cc//// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.com>// Maintainer: LPS//// This file is part of the SC Toolkit.//// The SC Toolkit is free software; you can redistribute it and/or modify// it under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.//// The SC Toolkit is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Library General Public License for more details.//// You should have received a copy of the GNU Library General Public License// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//// The U.S. Government is granted a limited license as per AL 91-7.//#ifdef __GNUG__#pragma implementation#endif#ifdef HAVE_CONFIG_H#include <scconfig.h>#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <util/group/globcnt.h>using namespace sc;#ifndef SEM_A#  define SEM_A 0200#endif#ifndef SEM_R#  define SEM_R 0400#endifGlobalCounter::GlobalCounter(){  semid_ = -1;  controls_release_ = 0;}voidGlobalCounter::cleanup(){  if (semid_ != -1 && controls_release_) {      int ret;#ifdef SEMCTL_REQUIRES_SEMUN      semun junk;      junk.val = 0;#else      int junk = 0;#endif      ret = semctl(semid_, 0, IPC_RMID, junk);      if (ret == -1) {          perror("semctl (IPC_RMID)");          abort();        }      semid_ = -1;    }}voidGlobalCounter::initialize(){  cleanup();  semid_ = semget(IPC_PRIVATE, 1, IPC_CREAT | SEM_R | SEM_A );  if (semid_ == -1) {      perror("semget");      abort();    }  controls_release_ = 1;  operator = (0);}voidGlobalCounter::initialize(const char *stringrep){  semid_ = atoi(stringrep);  controls_release_ = 0;}GlobalCounter::~GlobalCounter(){  cleanup();}voidGlobalCounter::operator = (int i){#ifdef SEMCTL_REQUIRES_SEMUN  semun val;  val.val = i;#else  int val = i;#endif  if (semctl(semid_, 0, SETVAL, val) == -1) {      perror("semctl (SETVAL)");      abort();    }}intGlobalCounter::val(){#ifdef SEMCTL_REQUIRES_SEMUN  semun val;  val.val = 0;#else  int val = 0;#endif  int ret;  if ((ret = semctl(semid_, 0, GETVAL, val)) == -1) {      perror("semctl (GETVAL)");      abort();    }  return ret;}voidGlobalCounter::wait_for_zero(){  operator += (0);}voidGlobalCounter::operator+=(int i){  struct sembuf s;  s.sem_num = 0;  s.sem_op = i;  s.sem_flg = 0;  if (semop(semid_, &s, 1) == -1) {      perror("semop");      abort();    }}voidGlobalCounter::operator--(){  operator += (-1);}voidGlobalCounter::operator++(){  operator += (1);}char *GlobalCounter::stringrep(){  char tmp[80];  sprintf(tmp, "%d", semid_);  return strcpy(new char[strlen(tmp)+1], tmp);}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -