为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
largeQ 2021-05-14 21:19:45
我正在编写一个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/)
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

对于文件,这取决于您的应用程序。如果只有一个goroutine写入文件,则无需这样做。如果不止一个,则取决于:

如果要在不同的进程(程序)之间进行协调,则可以使用flock(这可能不会很有趣)。

如果要在程序中协调多个goroutine,则可以使用互斥锁,或者可以查看是否可以重新组织程序,以便仅一个例程写入文件,而其他例程则通过通道发送更新。

对于SQLite,我认为最简单的方法是仅打开一个sqlite连接并使用各种goroutine中的连接。尽管它确实支持多个进程同时打开它,并且如果您的系统执行许多并发读取操作可能会更快(它使用全局锁进行写入),则可以同时打开它。


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信