Go-lang Web应用程序中的同步

我正在编写一个golang Web应用程序。Web应用程序访问文件系统(读取和写入)和sqlite3数据库文件。


问题1:如何在Go中同步文件系统访问?


type DataObject struct {

  data []byte

}


func (*d DataObject) Write() {

   //

   // Synchronization ?

   //

   ioutil.WriteFile("file.name", d.data, 0644)

   //

   // Stop synchronization ?

   //

}

问题2:是否需要同步sqlite3数据库文件访问?


type SqlObject struct {

  sqldata string

}


func (*s SqlObject) Store() error {

  //

  // Open the file, do I need some sort of synchronization?

  //

  con, err := sqlite.Open("database/datafile.db")

  if err != nil {

    return err

  }

  defer con.Close()


  err = con.Exec("INSERT INTO data(sqldata) values(?)", s.sqldata)

  if err != nil {

    return err

  }

  return nil

}

我正在使用gosqlite3驱动程序(http://code.google.com/p/gosqlite/)


largeQ
浏览 223回答 3
3回答

德玛西亚99

对于文件,这取决于您的应用程序。如果只有一个goroutine写入文件,则无需这样做。如果不止一个,则取决于:如果要在不同的进程(程序)之间进行协调,则可以使用flock(这可能不会很有趣)。如果要在程序中协调多个goroutine,则可以使用互斥锁,或者可以查看是否可以重新组织程序,以便仅一个例程写入文件,而其他例程则通过通道发送更新。对于SQLite,我认为最简单的方法是仅打开一个sqlite连接并使用各种goroutine中的连接。尽管它确实支持多个进程同时打开它,并且如果您的系统执行许多并发读取操作可能会更快(它使用全局锁进行写入),则可以同时打开它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go